diff --git a/README.txt b/README.txt old mode 100644 new mode 100755 index 4fdfc16..dfc706c --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -watershed 0.6.6 by paramat -For latest stable Minetest back to 0.4.8 -Depends default stairs bucket -Licenses: code WTFPL, textures CC BY-SA +watershed 0.7.1 by paramat, modified by the MinetestForFun Team. +For Minetest 0.4.13 and later +Depends default farming darkage +Licenses: WTFPL diff --git a/depends.txt b/depends.txt old mode 100644 new mode 100755 index 9fc9649..95289b2 --- a/depends.txt +++ b/depends.txt @@ -1,3 +1,3 @@ default -bucket -stairs +farming +darkage diff --git a/functions.lua b/functions.lua old mode 100644 new mode 100755 index a6940fc..5aa795c --- a/functions.lua +++ b/functions.lua @@ -1,31 +1,60 @@ +--[[ MFF: Prevent trees from destroying existing blocks + This is the list of "safe" blocks in which a tree can grow + They were moved outside the local safety function for speed (I hope) +--]] +local c_air = minetest.get_content_id("air") +local c_ignore = minetest.get_content_id("ignore") + +-- MFF: The local function to do safety checks +local function safely_set_block(t, k, v) + if t[k] == c_air or t[k] == c_ignore then + t[k] = v + end +end + function watershed_appletree(x, y, z, area, data) local c_tree = minetest.get_content_id("default:tree") local c_apple = minetest.get_content_id("default:apple") local c_wsappleaf = minetest.get_content_id("watershed:appleleaf") - for j = -2, 4 do - if j == 3 or j == 4 then + + -- MFF: Higher default tree with a bit of randomness + local tree_top = 5 + math.random(0, 1) + local leaves_height = tree_top - 1 + local branches_height = leaves_height - 1 + + for j = 0, tree_top do -- MFF: Higher tree, same design + if j >= leaves_height then for i = -2, 2 do for k = -2, 2 do local vil = area:index(x + i, y + j, z + k) if math.random(64) == 2 then - data[vil] = c_apple + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vil, c_apple) elseif math.random(5) ~= 2 then - data[vil] = c_wsappleaf + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vil, c_wsappleaf) end end end - elseif j == 2 then + elseif j == branches_height then for i = -1, 1 do for k = -1, 1 do if math.abs(i) + math.abs(k) == 2 then local vit = area:index(x + i, y + j, z + k) - data[vit] = c_tree + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vit, c_tree) end end end else local vit = area:index(x, y + j, z) - data[vit] = c_tree + -- MFF: Prevent trees from destroying existing blocks + if j == 0 then + -- MFF: the position of the sapling itself, replace it without checking. + data[vit] = c_tree + else + safely_set_block(data, vit, c_tree) + end end end end @@ -34,16 +63,17 @@ function watershed_pinetree(x, y, z, area, data) local c_wspitree = minetest.get_content_id("watershed:pinetree") local c_wsneedles = minetest.get_content_id("watershed:needles") local c_snowblock = minetest.get_content_id("default:snowblock") - for j = -4, 14 do + for j = 0, 14 do if j == 3 or j == 6 or j == 9 or j == 12 then for i = -2, 2 do for k = -2, 2 do if math.abs(i) == 2 or math.abs(k) == 2 then if math.random(7) ~= 2 then + -- MFF: Prevent trees from destroying existing blocks local vil = area:index(x + i, y + j, z + k) - data[vil] = c_wsneedles + safely_set_block(data, vil, c_wsneedles) local vila = area:index(x + i, y + j + 1, z + k) - data[vila] = c_snowblock + safely_set_block(data, vila, c_snowblock) end end end @@ -53,10 +83,11 @@ function watershed_pinetree(x, y, z, area, data) for k = -1, 1 do if not (i == 0 and j == 0) then if math.random(11) ~= 2 then + -- MFF: Prevent trees from destroying existing blocks local vil = area:index(x + i, y + j, z + k) - data[vil] = c_wsneedles + safely_set_block(data, vil, c_wsneedles) local vila = area:index(x + i, y + j + 1, z + k) - data[vila] = c_snowblock + safely_set_block(data, vila, c_snowblock) end end end @@ -65,40 +96,47 @@ function watershed_pinetree(x, y, z, area, data) for i = -1, 1 do for k = -1, 1 do if not (i == 0 and j == 0) then + -- MFF: Prevent trees from destroying existing blocks local vil = area:index(x + i, y + j, z + k) - data[vil] = c_wsneedles + safely_set_block(data, vil,c_wsneedles) local vila = area:index(x + i, y + j + 1, z + k) - data[vila] = c_wsneedles + safely_set_block(data, vila, c_wsneedles) local vilaa = area:index(x + i, y + j + 2, z + k) - data[vilaa] = c_snowblock + safely_set_block(data, vilaa, c_snowblock) end end end end + -- MFF: Prevent trees from destroying existing blocks local vit = area:index(x, y + j, z) - data[vit] = c_wspitree + if j == 0 then + data[vit] = c_wspitree -- No safety check for the sapling itself + else + safely_set_block(data, vit, c_wspitree) + end end local vil = area:index(x, y + 15, z) local vila = area:index(x, y + 16, z) local vilaa = area:index(x, y + 17, z) - data[vil] = c_wsneedles - data[vila] = c_wsneedles - data[vilaa] = c_snowblock + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vil, c_wsneedles) + safely_set_block(data, vila, c_wsneedles) + safely_set_block(data, vilaa, c_snowblock) end function watershed_jungletree(x, y, z, area, data) local c_juntree = minetest.get_content_id("default:jungletree") local c_wsjunleaf = minetest.get_content_id("watershed:jungleleaf") - local c_vine = minetest.get_content_id("watershed:vine") local top = math.random(17,23) local branch = math.floor(top * 0.6) - for j = -5, top do + for j = 0, top do if j == top or j == top - 1 or j == branch + 1 or j == branch + 2 then for i = -2, 2 do -- leaves for k = -2, 2 do local vi = area:index(x + i, y + j, z + k) if math.random(5) ~= 2 then - data[vi] = c_wsjunleaf + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vi, c_wsjunleaf) end end end @@ -107,64 +145,28 @@ function watershed_jungletree(x, y, z, area, data) for k = -1, 1 do if math.abs(i) + math.abs(k) == 2 then local vi = area:index(x + i, y + j, z + k) - data[vi] = c_juntree - end - end - end - end - if j >= 0 and j <= top - 3 then -- climbable nodes - for i = -1, 1 do - for k = -1, 1 do - if math.abs(i) + math.abs(k) == 1 then - local vi = area:index(x + i, y + j, z + k) - data[vi] = c_vine + -- MFF: Prevent trees from destroying existing blocks + safely_set_block(data, vi, c_juntree) end end end end if j <= top - 3 then -- trunk local vi = area:index(x, y + j, z) - data[vi] = c_juntree + -- MFF: Prevent trees from destroying existing blocks + if j == 0 then + data[vi] = c_juntree -- No safety check for the sapling itself + else + safely_set_block(data, vi, c_juntree) + end end end end function watershed_acaciatree(x, y, z, area, data) - local c_wsactree = minetest.get_content_id("watershed:acaciatree") - local c_wsacleaf = minetest.get_content_id("watershed:acacialeaf") - for j = -3, 6 do - if j == 6 then - for i = -4, 4 do - for k = -4, 4 do - if not (i == 0 or k == 0) then - if math.random(7) ~= 2 then - local vil = area:index(x + i, y + j, z + k) - data[vil] = c_wsacleaf - end - end - end - end - elseif j == 5 then - for i = -2, 2, 4 do - for k = -2, 2, 4 do - local vit = area:index(x + i, y + j, z + k) - data[vit] = c_wsactree - end - end - elseif j == 4 then - for i = -1, 1 do - for k = -1, 1 do - if math.abs(i) + math.abs(k) == 2 then - local vit = area:index(x + i, y + j, z + k) - data[vit] = c_wsactree - end - end - end - else - local vit = area:index(x, y + j, z) - data[vit] = c_wsactree - end - end + local c_sapling = minetest.get_content_id("moretrees:acacia_sapling_ongen") + local vi = area:index(x, y, z) + data[vi] = c_sapling end function watershed_flower(data, vi, noise) @@ -191,7 +193,7 @@ end function watershed_cactus(x, y, z, area, data) local c_wscactus = minetest.get_content_id("watershed:cactus") - for j = -2, 4 do + for j = 0, 4 do for i = -2, 2 do if i == 0 or j == 2 or (j == 3 and math.abs(i) == 2) then local vic = area:index(x + i, y + j, z) @@ -217,194 +219,38 @@ local SINGLENODE = true if SINGLENODE then -- Set mapgen parameters - minetest.register_on_mapgen_init(function(mgparams) - minetest.set_mapgen_params({mgname="singlenode", flags="nolight"}) - end) + minetest.set_mapgen_params({mgname="singlenode", flags="nolight"}) - -- Spawn player function. Requires chunksize = 80 nodes (the default) - - function spawnplayer(player) - local TERCEN = -128 - local TERSCA = 512 - local XLSAMP = 0.1 - local BASAMP = 0.3 - local MIDAMP = 0.1 - local CANAMP = 0.4 - local ATANAMP = 1.1 - local BLENEXP = 2 - local xsp - local ysp - local zsp - - local np_terrain = { - offset = 0, - scale = 1, - spread = {x=384, y=192, z=384}, - seed = 593, - octaves = 5, - persist = 0.67 - } - local np_mid = { - offset = 0, - scale = 1, - spread = {x=768, y=768, z=1}, - seed = 85546, - octaves = 5, - persist = 0.5 - } - local np_base = { - offset = 0, - scale = 1, - spread = {x=4096, y=4096, z=1}, - seed = 8890, - octaves = 3, - persist = 0.33 - } - local np_xlscale = { - offset = 0, - scale = 1, - spread = {x=8192, y=8192, z=1}, - seed = -72, - octaves = 3, - persist = 0.33 - } - - local nobj_terrain = nil - local nobj_mid = nil - local nobj_base = nil - local nobj_xlscale = nil - - for chunk = 1, 64 do - print ("[watershed] searching for spawn "..chunk) - local x0 = 80 * math.random(-32, 32) - 32 - local z0 = 80 * math.random(-32, 32) - 32 - local y0 = -32 - local x1 = x0 + 79 - local z1 = z0 + 79 - local y1 = 47 - local sidelen = 80 - local chulensxyz = {x=sidelen, y=sidelen+2, z=sidelen} - local chulensxz = {x=sidelen, y=sidelen, z=1} - local minposxyz = {x=x0, y=y0-1, z=z0} - local minposxz = {x=x0, y=z0} - - nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz) - nobj_mid = nobj_mid or minetest.get_perlin_map(np_mid, chulensxz) - nobj_base = nobj_base or minetest.get_perlin_map(np_base, chulensxz) - nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np_xlscale, chulensxz) - - local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz) - local nvals_mid = nobj_mid:get2dMap_flat(minposxz) - local nvals_base = nobj_base:get2dMap_flat(minposxz) - local nvals_xlscale = nobj_xlscale:get2dMap_flat(minposxz) - - local nixz = 1 - local nixyz = 1 - for z = z0, z1 do - for y = y0, y1 do - for x = x0, x1 do - local n_absterrain = math.abs(nvals_terrain[nixyz]) - local n_absmid = math.abs(nvals_mid[nixz]) - local n_absbase = math.abs(nvals_base[nixz]) - local n_xlscale = nvals_xlscale[nixz] - - local n_invbase = (1 - n_absbase) - local terblen = (math.max(n_invbase, 0)) ^ BLENEXP - local grad = math.atan((TERCEN - y) / TERSCA) * ATANAMP - local densitybase = n_invbase * BASAMP + n_xlscale * XLSAMP + grad - local densitymid = n_absmid * MIDAMP + densitybase - local canexp = 0.5 + terblen * 0.5 - local canamp = terblen * CANAMP - local density = n_absterrain ^ canexp * canamp * n_absmid + densitymid - - if y >= 1 and density > -0.005 and density < 0 then - ysp = y + 1 - xsp = x - zsp = z - break - end - nixz = nixz + 1 - nixyz = nixyz + 1 - end - if ysp then - break - end - nixz = nixz - 80 - end - if ysp then - break - end - nixz = nixz + 80 - end - if ysp then - break - end - end - print ("[watershed] spawn player ("..xsp.." "..ysp.." "..zsp..")") - player:setpos({x=xsp, y=ysp, z=zsp}) - end - - minetest.register_on_newplayer(function(player) - spawnplayer(player) - end) - - minetest.register_on_respawnplayer(function(player) - spawnplayer(player) - return true - end) + -- Spawn player function is useless in minetestforfun end --- ABM - --- Lava-water cooling - -minetest.register_abm({ - nodenames = {"group:lava"}, - neighbors = {"group:water"}, - interval = 11, - chance = 64, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.add_node(pos, {name="default:obsidian"}) - minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25}) - end, -}) - -- Appletree sapling -minetest.register_abm({ - nodenames = {"watershed:appling"}, - interval = 57, - chance = 3, - action = function(pos, node) + function default.grow_tree(pos) local x = pos.x local y = pos.y local z = pos.z local vm = minetest.get_voxel_manip() - local pos1 = {x=x-2, y=y-2, z=z-2} - local pos2 = {x=x+2, y=y+4, z=z+2} + local pos1 = {x = x - 2, y = y - 2, z = z - 2} + local pos2 = {x = x + 2, y = y + 4, z = z + 2} local emin, emax = vm:read_from_map(pos1, pos2) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() watershed_appletree(x, y, z, area, data) vm:set_data(data) vm:write_to_map() vm:update_map() - end, -}) + end -- Pine sapling -minetest.register_abm({ - nodenames = {"watershed:pineling"}, - interval = 59, - chance = 3, - action = function(pos, node) + function default.grow_pine_tree(pos) local x = pos.x local y = pos.y local z = pos.z local vm = minetest.get_voxel_manip() - local pos1 = {x=x-2, y=y-4, z=z-2} - local pos2 = {x=x+2, y=y+17, z=z+2} + local pos1 = {x = x - 2, y = y - 4, z = z - 2} + local pos2 = {x = x + 2, y = y + 17, z = z + 2} local emin, emax = vm:read_from_map(pos1, pos2) local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) local data = vm:get_data() @@ -412,51 +258,28 @@ minetest.register_abm({ vm:set_data(data) vm:write_to_map() vm:update_map() - end, -}) + end --- Acacia sapling - -minetest.register_abm({ - nodenames = {"watershed:acacialing"}, - interval = 61, - chance = 3, - action = function(pos, node) - local x = pos.x - local y = pos.y - local z = pos.z - local vm = minetest.get_voxel_manip() - local pos1 = {x=x-4, y=y-3, z=z-4} - local pos2 = {x=x+4, y=y+6, z=z+4} - local emin, emax = vm:read_from_map(pos1, pos2) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) - local data = vm:get_data() - watershed_acaciatree(x, y, z, area, data) - vm:set_data(data) - vm:write_to_map() - vm:update_map() - end, -}) +-- Acacia sapling is already defined in Moretrees -- Jungletree sapling -minetest.register_abm({ - nodenames = {"watershed:jungling"}, - interval = 63, - chance = 3, - action = function(pos, node) + function default.grow_jungle_tree(pos) local x = pos.x local y = pos.y local z = pos.z local vm = minetest.get_voxel_manip() - local pos1 = {x=x-2, y=y-5, z=z-2} - local pos2 = {x=x+2, y=y+23, z=z+2} + local pos1 = {x = x - 2, y = y - 5, z = z - 2} + local pos2 = {x = x + 2, y = y + 23, z = z + 2} local emin, emax = vm:read_from_map(pos1, pos2) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) local data = vm:get_data() watershed_jungletree(x, y, z, area, data) vm:set_data(data) vm:write_to_map() vm:update_map() - end, -}) + end + +default.grow_new_apple_tree = default.grow_tree +default.grow_new_jungle_tree = default.grow_jungle_tree +default.grow_new_pine_tree = default.grow_pine_tree diff --git a/init.lua b/init.lua old mode 100644 new mode 100755 index df36832..5746e50 --- a/init.lua +++ b/init.lua @@ -1,10 +1,3 @@ --- watershed 0.6.6 by paramat --- For latest stable Minetest and back to 0.4.8 --- Depends default stairs bucket --- License: code WTFPL, textures CC BY-SA - --- re-add z=1 for z component of 2D noisemap size to fix crashes - -- Parameters local YMIN = -33000 -- Approximate base of realm stone @@ -21,7 +14,8 @@ local XLSAMP = 0.1 -- Extra large scale height variation amplitude local BASAMP = 0.3 -- Base terrain amplitude local MIDAMP = 0.1 -- Mid terrain amplitude local CANAMP = 0.4 -- Canyon terrain maximum amplitude -local ATANAMP = 1.1 -- Arctan function amplitude, smaller = more and larger floatlands above ridges +local ATANAMP = 1.1 -- Arctan function amplitude, + -- smaller = more and larger floatlands above ridges local BLENEXP = 2 -- Terrain blend exponent local TSTONE = 0.02 -- Density threshold for stone, depth of soil at TERCEN @@ -29,7 +23,8 @@ local TRIVER = -0.028 -- Densitybase threshold for river surface local TRSAND = -0.035 -- Densitybase threshold for river sand local TSTREAM = -0.004 -- Densitymid threshold for stream surface local TSSAND = -0.005 -- Densitymid threshold for stream sand -local TLAVA = 2 -- Maximum densitybase threshold for lava, small because grad is non-linear +local TLAVA = 2 -- Maximum densitybase threshold for lava, + -- small because grad is non-linear local TFIS = 0.01 -- Fissure threshold, controls width local TSEAM = 0.2 -- Seam threshold, width of seams local ORESCA = 512 -- Seam system vertical scale @@ -37,13 +32,14 @@ local ORETHI = 0.002 -- Ore seam thickness tuner local BERGDEP = 32 -- Maximum iceberg depth local TFOG = -0.04 -- Fog top densitymid threshold -local HITET = 0.35 -- High temperature threshold -local LOTET = -0.35 -- Low .. -local ICETET = -0.7 -- Ice .. -local HIHUT = 0.35 -- High humidity threshold -local LOHUT = -0.35 -- Low .. -local FOGHUT = 1.0 -- Fog .. -local BLEND = 0.02 -- Biome blend randomness +local biomeparams = { + HITET = 0.35, -- High temperature threshold + LOTET = -0.35, -- Low .. + ICETET = -0.7, -- Ice .. + HIHUT = 0.35, -- High humidity threshold + LOHUT = -0.35, -- Low .. + BLEND = 0.02, -- Biome blend randomness +} local flora = { PINCHA = 36, -- Pine tree 1/x chance per node @@ -52,132 +48,178 @@ local flora = { GRACHA = 36, -- Grassland grasses JUTCHA = 16, -- Jungletree JUGCHA = 16, -- Junglegrass - CACCHA = 2209, -- Cactus - DRYCHA = 121, -- Dry shrub + CACCHA = 800, -- Cactus + CACCHA_DRYGRASS = 1600, + DRYCHA = 150, -- Dry shrub ACACHA = 1369, -- Acacia tree GOGCHA = 9, -- Golden grass PAPCHA = 4, -- Papyrus DUGCHA = 16, -- Dune grass } +local np = { +-- pack it in a single table to avoid "function has more than 60 upvalues" + -- 3D noises -- 3D noise for terrain -local np_terrain = { +terrain = { offset = 0, scale = 1, - spread = {x=384, y=192, z=384}, + spread = {x = 384, y = 192, z = 384}, seed = 593, octaves = 5, persist = 0.67 -} +}, -- 3D noise for fissures -local np_fissure = { +fissure = { offset = 0, scale = 1, - spread = {x=256, y=512, z=256}, + spread = {x = 256, y = 512, z = 256}, seed = 20099, octaves = 5, persist = 0.5 -} - --- 3D noise for temperature - -local np_temp = { - offset = 0, - scale = 1, - spread = {x=1024, y=1024, z=1024}, - seed = 9130, - octaves = 3, - persist = 0.5 -} - --- 3D noise for humidity - -local np_humid = { - offset = 0, - scale = 1, - spread = {x=1024, y=1024, z=1024}, - seed = -55500, - octaves = 3, - persist = 0.5 -} +}, -- 3D noise for ore seam networks -local np_seam = { +seam = { offset = 0, scale = 1, - spread = {x=512, y=512, z=512}, + spread = {x = 512, y = 512, z = 512}, seed = -992221, octaves = 2, persist = 0.5 -} +}, -- 3D noise for rock strata inclination -local np_strata = { +strata = { offset = 0, scale = 1, - spread = {x=512, y=512, z=512}, + spread = {x = 512, y = 512, z = 512}, seed = 92219, octaves = 3, persist = 0.5 -} +}, + +-- 3D noises for caves, from Valleys Mapgen mod by Gael-de-Sailly + +cave1 = { + offset = 0, + scale = 1, + spread = {x = 32, y = 32, z = 32}, + seed = -4640, + octaves = 4, + persist = 0.5 +}, + +cave2 = { + offset = 0, + scale = 1, + seed = 8804, + spread = {x = 32, y = 32, z = 32}, + octaves = 4, + persist = 0.5 +}, + +cave3 = { + offset = 0, + scale = 1, + seed = -4780, + spread = {x = 32, y = 32, z = 32}, + octaves = 4, + persist = 0.5 +}, + +cave4 = { + offset = 0, + scale = 1, + seed = -9969, + spread = {x = 32, y = 32, z = 32}, + octaves = 4, + persist = 0.5 +}, -- 2D noises -- 2D noise for mid terrain / streambed height -local np_mid = { +mid = { offset = 0, scale = 1, - spread = {x=768, y=768, z=768}, + spread = {x = 768, y = 768, z = 768}, seed = 85546, octaves = 5, persist = 0.5 -} +}, -- 2D noise for base terrain / riverbed height -local np_base = { +base = { offset = 0, scale = 1, - spread = {x=4096, y=4096, z=4096}, + spread = {x = 1024, y = 1024, z = 1024}, seed = 8890, octaves = 3, persist = 0.33 -} +}, -- 2D noise for extra large scale height variation -local np_xlscale = { +xlscale = { offset = 0, scale = 1, - spread = {x=8192, y=8192, z=8192}, + spread = {x = 4096, y = 4096, z = 4096}, seed = -72, octaves = 3, persist = 0.33 -} +}, -- 2D noise for magma surface -local np_magma = { +magma = { offset = 0, scale = 1, - spread = {x=128, y=128, z=128}, + spread = {x = 128, y = 128, z = 128}, seed = -13, octaves = 2, persist = 0.5 +}, + +-- 2D noise for temperature, the same than in Plantlife and Snowdrift + +temp = { + offset = 0, + scale = 1, + spread = {x = 256, y = 256, z = 256}, + seed = 112, + octaves = 3, + persist = 0.5 +}, + +-- 2D noise for humidity + +humid = { + offset = 0, + scale = 1, + spread = {x = 256, y = 256, z = 256}, + seed = 72384, + octaves = 4, + persist = 0.66 +}, + } +-- Do files --- Stuff +dofile(minetest.get_modpath("watershed") .. "/nodes.lua") +dofile(minetest.get_modpath("watershed") .. "/functions.lua") --- initialize 3D and 2D noise objects to nil +-- Initialize 3D and 2D noise objects to nil local nobj_terrain = nil local nobj_fissure = nil @@ -186,17 +228,40 @@ local nobj_humid = nil local nobj_seam = nil local nobj_strata = nil +local nobj_cave1 = nil +local nobj_cave2 = nil +local nobj_cave3 = nil +local nobj_cave4 = nil + local nobj_mid = nil local nobj_base = nil local nobj_xlscale = nil local nobj_magma = nil -dofile(minetest.get_modpath("watershed").."/nodes.lua") -dofile(minetest.get_modpath("watershed").."/functions.lua") + +-- Localise noise buffers + +local nbuf_terrain +local nbuf_fissure +local nbuf_temp +local nbuf_humid +local nbuf_seam +local nbuf_strata + +local nbuf_cave1 +local nbuf_cave2 +local nbuf_cave3 +local nbuf_cave4 + +local nbuf_mid +local nbuf_base +local nbuf_xlscale +local nbuf_magma -- Mapchunk generation function +local global_seed function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) local c_air = minetest.get_content_id("air") local c_ignore = minetest.get_content_id("ignore") @@ -225,9 +290,8 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) local c_clay = minetest.get_content_id("default:clay") local c_grass5 = minetest.get_content_id("default:grass_5") local c_obsidian = minetest.get_content_id("default:obsidian") - + local c_wsfreshwater = minetest.get_content_id("watershed:freshwater") - local c_wsmixwater = minetest.get_content_id("watershed:mixwater") local c_wsstone = minetest.get_content_id("watershed:stone") local c_wsredstone = minetest.get_content_id("watershed:redstone") local c_wsgrass = minetest.get_content_id("watershed:grass") @@ -237,66 +301,86 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) local c_wspermafrost = minetest.get_content_id("watershed:permafrost") local c_wslava = minetest.get_content_id("watershed:lava") local c_wsfreshice = minetest.get_content_id("watershed:freshice") - local c_wscloud = minetest.get_content_id("watershed:cloud") - local c_wsluxore = minetest.get_content_id("watershed:luxore") + local c_wscloud = minetest.get_content_id("air") -- disable clouds local c_wsicydirt = minetest.get_content_id("watershed:icydirt") + -- perlinmap stuff - local sidelen = x1 - x0 + 1 -- chunk sidelength - local chulensxyz = {x=sidelen, y=sidelen+2, z=sidelen} -- chunk dimensions, '+2' for overgeneration - local chulensxz = {x=sidelen, y=sidelen, z=1} -- here x = map x, y = map z - local minposxyz = {x=x0, y=y0-1, z=z0} - local minposxz = {x=x0, y=z0} -- here x = map x, y = map z + local sidelen = x1 - x0 + 1 + local sqr_sidelen = sidelen ^ 2 + local chulensxyz = {x = sidelen, y = sidelen + 2, z = sidelen} + local chulensxz = {x = sidelen, y = sidelen, z = 1} + local minposxyz = {x = x0, y = y0 - 1, z = z0} + local minposxz = {x = x0, y = z0} + -- 3D and 2D noise objects created once on first mapchunk generation only - nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz) - nobj_fissure = nobj_fissure or minetest.get_perlin_map(np_fissure, chulensxyz) - nobj_temp = nobj_temp or minetest.get_perlin_map(np_temp, chulensxyz) - nobj_humid = nobj_humid or minetest.get_perlin_map(np_humid, chulensxyz) - nobj_seam = nobj_seam or minetest.get_perlin_map(np_seam, chulensxyz) - nobj_strata = nobj_strata or minetest.get_perlin_map(np_strata, chulensxyz) - - nobj_mid = nobj_mid or minetest.get_perlin_map(np_mid, chulensxz) - nobj_base = nobj_base or minetest.get_perlin_map(np_base, chulensxz) - nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np_xlscale, chulensxz) - nobj_magma = nobj_magma or minetest.get_perlin_map(np_magma, chulensxz) + nobj_terrain = nobj_terrain or minetest.get_perlin_map(np.terrain, chulensxyz) + nobj_fissure = nobj_fissure or minetest.get_perlin_map(np.fissure, chulensxyz) + nobj_temp = nobj_temp or minetest.get_perlin_map(np.temp, chulensxyz) + nobj_humid = nobj_humid or minetest.get_perlin_map(np.humid, chulensxyz) + nobj_seam = nobj_seam or minetest.get_perlin_map(np.seam, chulensxyz) + nobj_strata = nobj_strata or minetest.get_perlin_map(np.strata, chulensxyz) + + nobj_cave1 = nobj_cave1 or minetest.get_perlin_map(np.cave1, chulensxyz) + nobj_cave2 = nobj_cave2 or minetest.get_perlin_map(np.cave2, chulensxyz) + nobj_cave3 = nobj_cave3 or minetest.get_perlin_map(np.cave3, chulensxyz) + nobj_cave4 = nobj_cave4 or minetest.get_perlin_map(np.cave4, chulensxyz) + + nobj_mid = nobj_mid or minetest.get_perlin_map(np.mid, chulensxz) + nobj_base = nobj_base or minetest.get_perlin_map(np.base, chulensxz) + nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np.xlscale, chulensxz) + nobj_magma = nobj_magma or minetest.get_perlin_map(np.magma, chulensxz) + -- 3D and 2D perlinmaps created per mapchunk local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz) local nvals_fissure = nobj_fissure:get3dMap_flat(minposxyz) - local nvals_temp = nobj_temp:get3dMap_flat(minposxyz) - local nvals_humid = nobj_humid:get3dMap_flat(minposxyz) - local nvals_seam = nobj_seam:get3dMap_flat(minposxyz) - local nvals_strata = nobj_strata:get3dMap_flat(minposxyz) - - local nvals_mid = nobj_mid:get2dMap_flat(minposxz) - local nvals_base = nobj_base:get2dMap_flat(minposxz) + local nvals_temp = nobj_temp :get2dMap_flat(minposxz) + local nvals_humid = nobj_humid :get2dMap_flat(minposxz) + local nvals_seam = nobj_seam :get3dMap_flat(minposxyz) + local nvals_strata = nobj_strata :get3dMap_flat(minposxyz) + + local nvals_cave1 = nobj_cave1 :get3dMap_flat(minposxyz) + local nvals_cave2 = nobj_cave2 :get3dMap_flat(minposxyz) + local nvals_cave3 = nobj_cave3 :get3dMap_flat(minposxyz) + local nvals_cave4 = nobj_cave4 :get3dMap_flat(minposxyz) + + local nvals_mid = nobj_mid :get2dMap_flat(minposxz) + local nvals_base = nobj_base :get2dMap_flat(minposxz) local nvals_xlscale = nobj_xlscale:get2dMap_flat(minposxz) - local nvals_magma = nobj_magma:get2dMap_flat(minposxz) + local nvals_magma = nobj_magma :get2dMap_flat(minposxz) + -- ungenerated chunk below? - local viu = area:index(x0, y0-1, z0) + local viu = area:index(x0, y0 - 1, z0) local ungen = data[viu] == c_ignore -- mapgen loop local nixyz = 1 -- 3D and 2D perlinmap indexes local nixz = 1 - local stable = {} -- stability table of true/false. is node supported from below by 2 stone or nodes on 2 stone? - local under = {} -- biome table. biome number of previous fine material placed in column - for z = z0, z1 do -- for each xy plane progressing northwards - for y = y0 - 1, y1 + 1 do -- for each x row progressing upwards - local vi = area:index(x0, y, z) -- voxelmanip index for first node in this x row - local viu = area:index(x0, y-1, z) -- index for under node - for x = x0, x1 do -- for each node do + local stable = {} -- stability table of true/false. + -- is node supported from below by 2 stone or nodes on 2 stone? + local under = {} -- biome table. + -- biome number of previous fine material placed in column + for z = z0, z1 do + for y = y0 - 1, y1 + 1 do + local vi = area:index(x0, y, z) + local viu = area:index(x0, y - 1, z) + for x = x0, x1 do local si = x - x0 + 1 -- stable, under tables index -- noise values for node local n_absterrain = math.abs(nvals_terrain[nixyz]) local n_fissure = nvals_fissure[nixyz] - local n_temp = nvals_temp[nixyz] - local n_humid = nvals_humid[nixyz] local n_seam = nvals_seam[nixyz] local n_strata = nvals_strata[nixyz] - + local n_cave1 = nvals_cave1[nixyz] + local n_cave2 = nvals_cave2[nixyz] + local n_cave3 = nvals_cave3[nixyz] + local n_cave4 = nvals_cave4[nixyz] + local n_absmid = math.abs(nvals_mid[nixz]) local n_absbase = math.abs(nvals_base[nixz]) local n_xlscale = nvals_xlscale[nixz] local n_magma = nvals_magma[nixz] + local n_temp = nvals_temp[nixz] + local n_humid = nvals_humid[nixz] -- get densities local n_invbase = (1 - n_absbase) local terblen = (math.max(n_invbase, 0)) ^ BLENEXP @@ -315,39 +399,46 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) local tlava = TLAVA * (1 - n_magma ^ 4 * terblen ^ 16 * 0.6) -- lava threshold local ysand = YSAV + n_fissure * SAMP + math.random() * 2 -- sandline local bergdep = math.abs(n_seam) * BERGDEP -- iceberg depth - + local nofis = false -- set fissure bool - if math.abs(n_fissure) >= TFIS then + if math.abs(n_fissure) >= TFIS + and n_cave1 ^ 2 + n_cave2 ^ 2 + n_cave3 ^ 2 + n_cave4 ^ 2 >= 0.07 then -- from Valleys Mapgen nofis = true end - + local biome = false -- select biome for node - if n_temp < LOTET + (math.random() - 0.5) * BLEND then - if n_humid < LOHUT + (math.random() - 0.5) * BLEND then + if n_temp < biomeparams.LOTET + + (math.random() - 0.5) * biomeparams.BLEND then + if n_humid < biomeparams.LOHUT + + (math.random() - 0.5) * biomeparams.BLEND then biome = 1 -- tundra - elseif n_humid > HIHUT + (math.random() - 0.5) * BLEND then + elseif n_humid > biomeparams.HIHUT + + (math.random() - 0.5) * biomeparams.BLEND then biome = 3 -- taiga else biome = 2 -- snowy plains end - elseif n_temp > HITET + (math.random() - 0.5) * BLEND then - if n_humid < LOHUT + (math.random() - 0.5) * BLEND then + elseif n_temp > biomeparams.HITET + + (math.random() - 0.5) * biomeparams.BLEND then + if n_humid < biomeparams.LOHUT + + (math.random() - 0.5) * biomeparams.BLEND then biome = 7 -- desert - elseif n_humid > HIHUT + (math.random() - 0.5) * BLEND then + elseif n_humid > biomeparams.HIHUT + + (math.random() - 0.5) * biomeparams.BLEND then biome = 9 -- rainforest else biome = 8 -- savanna end else - if n_humid < LOHUT then + if n_humid < biomeparams.LOHUT then biome = 4 -- dry grassland - elseif n_humid > HIHUT then + elseif n_humid > biomeparams.HIHUT then biome = 6 -- deciduous forest else biome = 5 -- grassland end end - + -- overgeneration and in-chunk generation if y == y0 - 1 then -- node layer below chunk, initialise tables under[si] = 0 @@ -360,22 +451,21 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) else -- scan top layer of chunk below local nodid = data[vi] if nodid == c_wsstone - or nodid == c_wsredstone - or nodid == c_wsdirt - or nodid == c_wspermafrost - or nodid == c_wsluxore - or nodid == c_sand - or nodid == c_desand - or nodid == c_mese - or nodid == c_stodiam - or nodid == c_stogold - or nodid == c_stocopp - or nodid == c_stoiron - or nodid == c_stocoal - or nodid == c_sandstone - or nodid == c_gravel - or nodid == c_clay - or nodid == c_obsidian then + or nodid == c_wsredstone + or nodid == c_wsdirt + or nodid == c_wspermafrost + or nodid == c_sand + or nodid == c_desand + or nodid == c_mese + or nodid == c_stodiam + or nodid == c_stogold + or nodid == c_stocopp + or nodid == c_stoiron + or nodid == c_stocoal + or nodid == c_sandstone + or nodid == c_gravel + or nodid == c_clay + or nodid == c_obsidian then stable[si] = 2 else stable[si] = 0 @@ -390,57 +480,41 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) stable[si] = 0 under[si] = 0 elseif densitybase >= tlava - math.min(0.6 + density * 6, 0.6) - and density < tstone then -- obsidian + and density < tstone then -- obsidian data[vi] = c_obsidian stable[si] = 1 under[si] = 0 elseif density >= tstone and nofis -- stone cut by fissures - or (density >= tstone and density < TSTONE * 1.2 and y <= YWAT) -- stone around water - or (density >= tstone and density < TSTONE * 1.2 and densitybase >= triver ) -- stone around river - or (density >= tstone and density < TSTONE * 1.2 and densitymid >= tstream ) then -- stone around stream + or (density >= tstone and density < TSTONE * 1.2 and + y <= YWAT) -- stone around water + or (density >= tstone and density < TSTONE * 1.2 and + densitybase >= triver ) -- stone around river + or (density >= tstone and density < TSTONE * 1.2 and + densitymid >= tstream ) then -- stone around stream local densitystr = n_strata * 0.25 + (TERCEN - y) / ORESCA - local densityper = densitystr - math.floor(densitystr) -- periodic strata 'density' + -- periodic strata 'density' + local densityper = densitystr - math.floor(densitystr) if (densityper >= 0.05 and densityper <= 0.09) -- sandstone strata - or (densityper >= 0.25 and densityper <= 0.28) - or (densityper >= 0.45 and densityper <= 0.47) - or (densityper >= 0.74 and densityper <= 0.76) - or (densityper >= 0.77 and densityper <= 0.79) - or (densityper >= 0.84 and densityper <= 0.87) - or (densityper >= 0.95 and densityper <= 0.98) then - data[vi] = c_sandstone - elseif biome == 7 and density < TSTONE * 3 then -- desert stone as surface layer + or (densityper >= 0.25 and densityper <= 0.28) + or (densityper >= 0.45 and densityper <= 0.47) + or (densityper >= 0.74 and densityper <= 0.76) + or (densityper >= 0.77 and densityper <= 0.79) + or (densityper >= 0.84 and densityper <= 0.87) + or (densityper >= 0.95 and densityper <= 0.98) then + if y > -84 and (y >= -80 or math.random() > 0.5) then + data[vi] = c_sandstone + else + data[vi] = c_wsstone + end + elseif biome == 7 and density < TSTONE * 3 then + + -- desert stone as surface layer data[vi] = c_wsredstone elseif math.abs(n_seam) < TSEAM then - if densityper >= 0 and densityper <= ORETHI * 4 then -- ore seams - data[vi] = c_stocoal - elseif densityper >= 0.3 and densityper <= 0.3 + ORETHI * 4 then - data[vi] = c_stocoal - elseif densityper >= 0.5 and densityper <= 0.5 + ORETHI * 4 then - data[vi] = c_stocoal - elseif densityper >= 0.8 and densityper <= 0.8 + ORETHI * 4 then - data[vi] = c_stocoal - elseif densityper >= 0.55 and densityper <= 0.55 + ORETHI * 2 then + -- ore seams + + if densityper >= 0.55 and densityper <= 0.55 + ORETHI * 2 then data[vi] = c_gravel - elseif densityper >= 0.1 and densityper <= 0.1 + ORETHI * 2 then - data[vi] = c_wsluxore - elseif densityper >= 0.2 and densityper <= 0.2 + ORETHI * 2 - and math.random(2) == 2 then - data[vi] = c_stoiron - elseif densityper >= 0.65 and densityper <= 0.65 + ORETHI * 2 - and math.random(2) == 2 then - data[vi] = c_stoiron - elseif densityper >= 0.4 and densityper <= 0.4 + ORETHI * 2 - and math.random(3) == 2 then - data[vi] = c_stocopp - elseif densityper >= 0.6 and densityper <= 0.6 + ORETHI - and math.random(5) == 2 then - data[vi] = c_stogold - elseif densityper >= 0.7 and densityper <= 0.7 + ORETHI - and math.random(7) == 2 then - data[vi] = c_mese - elseif densityper >= 0.9 and densityper <= 0.9 + ORETHI - and math.random(11) == 2 then - data[vi] = c_stodiam else data[vi] = c_wsstone end @@ -449,6 +523,8 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) end stable[si] = stable[si] + 1 under[si] = 0 + -- fine materials + elseif density >= 0 and density < tstone and stable[si] >= 2 then -- fine materials if y == YWAT - 2 and math.abs(n_temp) < 0.05 then -- clay data[vi] = c_clay @@ -495,8 +571,8 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) under[si] = 0 end elseif y >= YWAT - bergdep and y <= YWAT + bergdep / 8 -- icesheet - and n_temp < ICETET and density < tstone - and math.abs(n_fissure) > 0.01 then + and n_temp < biomeparams.ICETET and density < tstone + and nofis then data[vi] = c_ice under[si] = 12 stable[si] = 0 @@ -504,31 +580,29 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) data[vi] = c_water under[si] = 0 stable[si] = 0 - elseif densitybase >= triver and density < tstone then -- river water not in fissures - if n_temp < ICETET then + -- river water not in fissures + + elseif densitybase >= triver and density < tstone then + if n_temp < biomeparams.ICETET then data[vi] = c_wsfreshice else - if y == YWAT + 1 then - data[vi] = c_wsmixwater - else - data[vi] = c_wsfreshwater - end + data[vi] = c_wsfreshwater end stable[si] = 0 under[si] = 0 - elseif densitymid >= tstream and density < tstone then -- stream water not in fissures - if n_temp < ICETET then + -- stream water not in fissures + + elseif densitymid >= tstream and density < tstone then + if n_temp < biomeparams.ICETET then data[vi] = c_wsfreshice else - if y == YWAT + 1 then - data[vi] = c_wsmixwater - else - data[vi] = c_wsfreshwater - end + data[vi] = c_wsfreshwater end stable[si] = 0 under[si] = 0 - elseif density < 0 and y >= YWAT and under[si] ~= 0 then -- air above surface node + -- air above surface node + + elseif density < 0 and y >= YWAT and under[si] ~= 0 then local fnoise = n_fissure -- noise for flower colours if under[si] == 1 then data[viu] = c_wsicydirt @@ -547,7 +621,9 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) end elseif under[si] == 4 then data[viu] = c_wsdrygrass - if math.random(flora.DRYCHA) == 2 then + if math.random(flora.CACCHA_DRYGRASS) == 2 then + watershed_cactus(x, y, z, area, data) + elseif math.random(flora.DRYCHA) == 2 then data[vi] = c_dryshrub end elseif under[si] == 5 then @@ -568,7 +644,7 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) data[vi] = c_grass5 end end - elseif under[si] == 7 and n_temp < HITET + 0.1 then + elseif under[si] == 7 and n_temp < biomeparams.HITET + 0.1 then if math.random(flora.CACCHA) == 2 then watershed_cactus(x, y, z, area, data) elseif math.random(flora.DRYCHA) == 2 then @@ -593,34 +669,21 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) end end elseif under[si] == 10 then -- dunes - if math.random(flora.DUGCHA) == 2 and y > YSAV - and biome >= 4 then + if math.random(flora.DUGCHA) == 2 and y > YSAV + and biome >= 4 then data[vi] = c_wsgoldengrass end - elseif under[si] == 11 and n_temp > HITET then -- hot biome riverbank + elseif under[si] == 11 and n_temp > biomeparams.HITET then -- hot biome riverbank if math.random(flora.PAPCHA) == 2 then watershed_papyrus(x, y, z, area, data) end - elseif under[si] == 12 - and n_humid > LOHUT + (math.random() - 0.5) * BLEND then -- snowy iceberg + -- snowy iceberg + elseif under[si] == 12 and n_humid > biomeparams.LOHUT + + (math.random() - 0.5) * biomeparams.BLEND then data[vi] = c_snowblock end stable[si] = 0 under[si] = 0 - elseif density < 0 and densitymid > TFOG and n_humid > FOGHUT then -- fog - data[vi] = c_wscloud - stable[si] = 0 - under[si] = 0 - elseif density < 0 and CLOUDS and y == y1 and y >= YCLOMIN then -- clouds - local xrq = 16 * math.floor((x - x0) / 16) -- quantise to 16x16 lattice - local zrq = 16 * math.floor((z - z0) / 16) - local yrq = 79 - local qixyz = zrq * 6400 + yrq * 80 + xrq + 1 -- quantised 3D index - if math.abs(nvals_fissure[qixyz]) < nvals_humid[qixyz] * 0.1 then - data[vi] = c_wscloud - end - stable[si] = 0 - under[si] = 0 else -- air stable[si] = 0 under[si] = 0 @@ -648,7 +711,7 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) end end end - nixyz = nixyz + 1 -- increment perlinmap and voxelarea indexes along x row + nixyz = nixyz + 1 nixz = nixz + 1 vi = vi + 1 viu = viu + 1 @@ -657,57 +720,15 @@ function watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) end nixz = nixz + sidelen end + + darkage_mapgen(data, area, {x=x0, y=y0, z=z0}, {x=x1, y=y1, z=z1}, global_seed) -- Generate darkage ores end --- Regenerate chunk by chat command. Dependant on chunksize = 5. - -minetest.register_chatcommand("regen",{ - description = "Regenerate player's current mapchunk", - privs = {server = true, rollback = true}, - func = function(name, params) - local t1 = os.clock() - - local player = minetest.get_player_by_name(name) - local pos = player:getpos() - local plax = math.floor(pos.x + 0.5) - local play = math.floor(pos.y + 0.5) - local plaz = math.floor(pos.z + 0.5) - local x0 = (80 * math.floor((plax + 32) / 80)) - 32 - local y0 = (80 * math.floor((play + 32) / 80)) - 32 - local z0 = (80 * math.floor((plaz + 32) / 80)) - 32 - local x1 = x0 + 79 - local y1 = y0 + 79 - local z1 = z0 + 79 - - if y0 < YMIN or y1 > YMAX then - return - end - - print ("[watershed] regenerate mapchunk") - - local vm = minetest.get_voxel_manip() - local pos1 = {x = x0, y = y0 - 1, z = z0} - local pos2 = {x = x1, y = y1 + 1, z = z1} - local emin, emax = vm:read_from_map(pos1, pos2) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) - local data = vm:get_data() - - watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) - - vm:set_data(data) - vm:write_to_map() - vm:update_map() - - local chugent = math.ceil((os.clock() - t1) * 1000) - print ("[watershed] "..chugent.." ms") - end -}) - - -- On generated function minetest.register_on_generated(function(minp, maxp, seed) + global_seed = seed if minp.y < YMIN or maxp.y > YMAX then return end @@ -720,21 +741,42 @@ minetest.register_on_generated(function(minp, maxp, seed) local x0 = minp.x local y0 = minp.y local z0 = minp.z - - print ("[watershed] generate mapchunk minp ("..x0.." "..y0.." "..z0..")") + + print ("[watershed] generate mapchunk minp (" .. x0 .. " " .. y0 .. " " .. z0 .. ")") local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax} + local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} local data = vm:get_data() watershed_chunkgen(x0, y0, z0, x1, y1, z1, area, data) vm:set_data(data) + minetest.generate_ores(vm, minp, maxp) + minetest.generate_decorations(vm, minp, maxp) + vm:set_lighting({day = 0, night = 0}) vm:calc_lighting() vm:write_to_map(data) vm:update_liquids() - + local chugent = math.ceil((os.clock() - t1) * 1000) - print ("[watershed] "..chugent.." ms") + print ("[watershed] " .. chugent .. " ms") end) +default.register_ores() +farming.register_mgv6_decorations() +-- cherry tree +minetest.register_decoration({ + deco_type = "simple", + place_on = "default:dirt_with_grass", + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.005, + spread = {x=100, y=100, z=100}, + seed = 278, + octaves = 2, + persist = 0.7 + }, + decoration = "default:mg_cherry_sapling", + height = 1, +}) diff --git a/license.txt b/license.txt old mode 100644 new mode 100755 diff --git a/nodes.lua b/nodes.lua old mode 100644 new mode 100755 index c6b3524..f852141 --- a/nodes.lua +++ b/nodes.lua @@ -1,647 +1,37 @@ -minetest.register_node("watershed:appleleaf", { - description = "Appletree leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"default_leaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - {items = {"watershed:appling"},rarity = 20}, - {items = {"watershed:appleleaf"}} - } - }, - sounds = default.node_sound_leaves_defaults(), -}) +minetest.register_alias("watershed:appleleaf", "default:leaves") +minetest.register_alias("watershed:appling", "default:sapling") +minetest.register_alias("watershed:acaciatree", "moretrees:acacia_trunk") +minetest.register_alias("watershed:acacialeaf", "moretrees:acacia_leaves") +minetest.register_alias("watershed:acacialing", "moretrees:acacia_sapling") +minetest.register_alias("watershed:pinetree", "default:pine_tree") +minetest.register_alias("watershed:needles", "default:pine_needles") +minetest.register_alias("watershed:pineling", "default:pine_sapling") +minetest.register_alias("watershed:jungleleaf", "default:jungleleaves") +minetest.register_alias("watershed:jungling", "default:junglesapling") -minetest.register_node("watershed:appling", { - description = "Appletree sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_sapling.png"}, - inventory_image = "default_sapling.png", - wield_image = "default_sapling.png", - paramtype = "light", - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} - }, - groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) +minetest.register_alias("watershed:dirt", "default:dirt") +minetest.register_alias("watershed:icydirt", "default:dirt_with_grass") +minetest.register_alias("watershed:grass", "default:dirt_with_grass") +minetest.register_alias("watershed:redstone", "default:desert_stone") +minetest.register_alias("watershed:redcobble", "default:desert_cobble") +minetest.register_alias("watershed:stone", "default:stone") +minetest.register_alias("watershed:cactus", "default:cactus") +minetest.register_alias("watershed:goldengrass", "default:dry_shrub") +minetest.register_alias("watershed:drygrass", "default:dirt_with_dry_grass") +minetest.register_alias("watershed:permafrost", "default:dirt") +minetest.register_alias("watershed:freshice", "default:ice") +minetest.register_alias("watershed:cloud", "default:cloud") +minetest.register_alias("watershed:luxore", "default:stone") +minetest.register_alias("watershed:light", "lantern:lamp") +minetest.register_alias("watershed:acaciawood", "moretrees:acacia_wood") +minetest.register_alias("watershed:pinewood", "default:pinewood") -minetest.register_node("watershed:acaciatree", { - description = "Acacia tree", - tiles = {"watershed_acaciatreetop.png", "watershed_acaciatreetop.png", "watershed_acaciatree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("watershed:acacialeaf", { - description = "Acacia leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"watershed_acacialeaf.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - {items = {"watershed:acacialing"},rarity = 20}, - {items = {"watershed:acacialeaf"}} - } - }, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:acacialing", { - description = "Acacia tree sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"watershed_acacialing.png"}, - inventory_image = "watershed_acacialing.png", - wield_image = "watershed_acacialing.png", - paramtype = "light", - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} - }, - groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:pinetree", { - description = "Pine tree", - tiles = {"watershed_pinetreetop.png", "watershed_pinetreetop.png", "watershed_pinetree.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("watershed:needles", { - description = "Pine needles", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"watershed_needles.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy=3}, - drop = { - max_items = 1, - items = { - {items = {"watershed:pineling"},rarity = 20}, - {items = {"watershed:needles"}} - } - }, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:pineling", { - description = "Pine sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"watershed_pineling.png"}, - inventory_image = "watershed_pineling.png", - wield_image = "watershed_pineling.png", - paramtype = "light", - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} - }, - groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:jungleleaf", { - description = "Jungletree leaves", - drawtype = "allfaces_optional", - visual_scale = 1.3, - tiles = {"default_jungleleaves.png"}, - paramtype = "light", - is_ground_content = false, - groups = {snappy=3, flammable=2, leaves=1}, - drop = { - max_items = 1, - items = { - {items = {"watershed:jungling"},rarity = 20}, - {items = {"watershed:jungleleaf"}} - } - }, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:jungling", { - description = "Jungletree sapling", - drawtype = "plantlike", - visual_scale = 1.0, - tiles = {"default_junglesapling.png"}, - inventory_image = "default_junglesapling.png", - wield_image = "default_junglesapling.png", - paramtype = "light", - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} - }, - groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("watershed:dirt", { - description = "Dirt", - tiles = {"default_dirt.png"}, - is_ground_content = false, - groups = {crumbly=3,soil=1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("watershed:icydirt", { - description = "Icy dirt", - tiles = {"watershed_icydirt.png"}, - is_ground_content = false, - groups = {crumbly=1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_snow_footstep", gain=0.15}, - dug = {name="default_snow_footstep", gain=0.45}, - }), -}) - -minetest.register_node("watershed:grass", { - description = "Grass", - tiles = {"default_grass.png", "default_dirt.png", "default_grass.png"}, - is_ground_content = false, - groups = {crumbly=3,soil=1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.25}, - }), -}) - -minetest.register_node("watershed:redstone", { - description = "Red stone", - tiles = {"default_desert_stone.png"}, - is_ground_content = false, - groups = {cracky=3}, - drop = "watershed:redcobble", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("watershed:redcobble", { - description = "Red cobblestone", - tiles = {"watershed_redcobble.png"}, - is_ground_content = false, - groups = {cracky=3, stone=2}, - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("watershed:stone", { - description = "Stone", - tiles = {"default_stone.png"}, - is_ground_content = false, - groups = {cracky=3}, - drop = "default:cobble", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_node("watershed:cactus", { - description = "Cactus", - tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {snappy=1,choppy=3,flammable=2}, - drop = "default:cactus", - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - -minetest.register_node("watershed:goldengrass", { - description = "Golden grass", - drawtype = "plantlike", - tiles = {"watershed_goldengrass.png"}, - inventory_image = "watershed_goldengrass.png", - wield_image = "watershed_goldengrass.png", - paramtype = "light", - walkable = false, - buildable_to = true, - is_ground_content = false, - groups = {snappy=3,flammable=3,flora=1,attached_node=1}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, - }, -}) - -minetest.register_node("watershed:drygrass", { - description = "Dry grass", - tiles = {"watershed_drygrass.png"}, - is_ground_content = false, - groups = {crumbly=1,soil=1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.4}, - }), -}) - -minetest.register_node("watershed:permafrost", { - description = "Permafrost", - tiles = {"watershed_permafrost.png"}, - is_ground_content = false, - groups = {crumbly=1}, - drop = "default:dirt", - sounds = default.node_sound_dirt_defaults(), -}) - -minetest.register_node("watershed:vine", { - description = "Jungletree vine", - drawtype = "airlike", - paramtype = "light", - walkable = false, - climbable = true, - pointable = false, - diggable = false, - buildable_to = true, - is_ground_content = false, - groups = {not_in_creative_inventory=1}, -}) - -minetest.register_node("watershed:freshice", { - description = "Fresh ice", - tiles = {"watershed_freshice.png"}, - is_ground_content = false, - paramtype = "light", - groups = {cracky=3}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("watershed:cloud", { - description = "Cloud", - drawtype = "glasslike", - tiles = {"watershed_cloud.png"}, - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - post_effect_color = {a=23, r=241, g=248, b=255}, -}) - -minetest.register_node("watershed:luxore", { - description = "Lux ore", - tiles = {"watershed_luxore.png"}, - paramtype = "light", - light_source = 14, - groups = {cracky=3}, - drop = "watershed:luxcrystal 8", - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("watershed:light", { - description = "Light", - tiles = {"watershed_light.png"}, - paramtype = "light", - light_source = 14, - groups = {cracky=3}, - sounds = default.node_sound_glass_defaults(), -}) - -minetest.register_node("watershed:acaciawood", { - description = "Acacia wood planks", - tiles = {"watershed_acaciawood.png"}, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - -minetest.register_node("watershed:pinewood", { - description = "Pine wood planks", - tiles = {"watershed_pinewood.png"}, - groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, - sounds = default.node_sound_wood_defaults(), -}) - - - -minetest.register_node("watershed:freshwater", { - description = "Freshwater source", - inventory_image = minetest.inventorycube("watershed_freshwater.png"), - drawtype = "liquid", - tiles = { - { - name="watershed_freshwateranim.png", - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2.0} - } - }, - special_tiles = { - { - name="watershed_freshwateranim.png", - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2.0}, - backface_culling = false, - } - }, - alpha = WATER_ALPHA, - paramtype = "light", - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "watershed:freshwaterflow", - liquid_alternative_source = "watershed:freshwater", - liquid_viscosity = WATER_VISC, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=150, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1}, -}) - -minetest.register_node("watershed:freshwaterflow", { - description = "Flowing freshwater", - inventory_image = minetest.inventorycube("watershed_freshwater.png"), - drawtype = "flowingliquid", - tiles = {"watershed_freshwater.png"}, - special_tiles = { - { - image="watershed_freshwaterflowanim.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8} - }, - { - image="watershed_freshwaterflowanim.png", - backface_culling=true, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8} - }, - }, - alpha = WATER_ALPHA, - paramtype = "light", - paramtype2 = "flowingliquid", - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "watershed:freshwaterflow", - liquid_alternative_source = "watershed:freshwater", - liquid_viscosity = WATER_VISC, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=150, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, -}) - -minetest.register_node("watershed:lava", { - description = "Lava source", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "liquid", - tiles = { - {name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}} - }, - special_tiles = { - { - name="default_lava_source_animated.png", - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=3.0}, - backface_culling = false, - } - }, - paramtype = "light", - light_source = 14, - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "watershed:lavaflow", - liquid_alternative_source = "watershed:lava", - liquid_viscosity = LAVA_VISC, - liquid_renewable = false, - liquid_range = 2, - damage_per_second = 8, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3, igniter=1}, -}) - -minetest.register_node("watershed:lavaflow", { - description = "Flowing lava", - inventory_image = minetest.inventorycube("default_lava.png"), - drawtype = "flowingliquid", - tiles = {"default_lava.png"}, - special_tiles = { - { - image="default_lava_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=3.3} - }, - { - image="default_lava_flowing_animated.png", - backface_culling=true, - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=3.3} - }, - }, - paramtype = "light", - paramtype2 = "flowingliquid", - light_source = 14, - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "watershed:lavaflow", - liquid_alternative_source = "watershed:lava", - liquid_viscosity = LAVA_VISC, - liquid_renewable = false, - liquid_range = 2, - damage_per_second = 8, - post_effect_color = {a=192, r=255, g=64, b=0}, - groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1}, -}) - -minetest.register_node("watershed:mixwater", { - description = "Mixed water source", - inventory_image = minetest.inventorycube("watershed_mixwater.png"), - drawtype = "liquid", - tiles = { - { - name="watershed_mixwateranim.png", - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2.0} - } - }, - special_tiles = { - { - name="watershed_mixwateranim.png", - animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2.0}, - backface_culling = false, - } - }, - alpha = WATER_ALPHA, - paramtype = "light", - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "source", - liquid_alternative_flowing = "watershed:mixwaterflow", - liquid_alternative_source = "watershed:mixwater", - liquid_viscosity = WATER_VISC, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=120, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1}, -}) - -minetest.register_node("watershed:mixwaterflow", { - description = "Flowing mixed water", - inventory_image = minetest.inventorycube("watershed_mixwater.png"), - drawtype = "flowingliquid", - tiles = {"watershed_mixwater.png"}, - special_tiles = { - { - image="watershed_mixwaterflowanim.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8} - }, - { - image="watershed_mixwaterflowanim.png", - backface_culling=true, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8} - }, - }, - alpha = WATER_ALPHA, - paramtype = "light", - paramtype2 = "flowingliquid", - is_ground_content = false, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - drop = "", - drowning = 1, - liquidtype = "flowing", - liquid_alternative_flowing = "watershed:mixwaterflow", - liquid_alternative_source = "watershed:mixwater", - liquid_viscosity = WATER_VISC, - liquid_renewable = false, - liquid_range = 2, - post_effect_color = {a=64, r=100, g=120, b=200}, - groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, -}) +minetest.register_alias("watershed:freshwater", "default:river_water_source") +minetest.register_alias("watershed:freshwaterflow", "default:river_water_flowing") +minetest.register_alias("watershed:lava", "default:lava_source") +minetest.register_alias("watershed:lavaflow", "default:lava_flowing") -- Items -minetest.register_craftitem("watershed:luxcrystal", { - description = "Lux crystal", - inventory_image = "watershed_luxcrystal.png", -}) +minetest.register_alias("watershed:luxcrystal", "default:cobble") --- Crafting - -minetest.register_craft({ - type = "cooking", - output = "default:desert_stone", - recipe = "watershed:redcobble", -}) - -minetest.register_craft({ - output = "watershed:light 8", - recipe = { - {"default:glass", "default:glass", "default:glass"}, - {"default:glass", "watershed:luxcrystal", "default:glass"}, - {"default:glass", "default:glass", "default:glass"}, - }, -}) - -minetest.register_craft({ - output = "watershed:acaciawood 4", - recipe = { - {"watershed:acaciatree"}, - } -}) - -minetest.register_craft({ - output = "watershed:pinewood 4", - recipe = { - {"watershed:pinetree"}, - } -}) - --- Buckets - -bucket.register_liquid( - "watershed:freshwater", - "watershed:freshwaterflow", - "watershed:bucket_freshwater", - "watershed_bucketfreshwater.png", - "WS Fresh Water Bucket" -) - -bucket.register_liquid( - "watershed:lava", - "watershed:lavaflow", - "watershed:bucket_lava", - "bucket_lava.png", - "WS Lava Bucket" -) - --- Fuel - -minetest.register_craft({ - type = "fuel", - recipe = "watershed:bucket_lava", - burntime = 60, - replacements = {{"watershed:bucket_lava", "bucket:bucket_empty"}}, -}) - --- Register stairs and slabs - -stairs.register_stair_and_slab("acaciawood", "watershed:acaciawood", - {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - {"watershed_acaciawood.png"}, - "Acaciawood stair", - "Acaciawood slab", - default.node_sound_wood_defaults()) - -stairs.register_stair_and_slab("pinewood", "watershed:pinewood", - {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, - {"watershed_pinewood.png"}, - "Pinewood stair", - "Pinewood slab", - default.node_sound_wood_defaults()) diff --git a/textures/watershed_acacialeaf.png b/textures/watershed_acacialeaf.png deleted file mode 100644 index 08cf399..0000000 Binary files a/textures/watershed_acacialeaf.png and /dev/null differ diff --git a/textures/watershed_acacialing.png b/textures/watershed_acacialing.png deleted file mode 100644 index 07170a0..0000000 Binary files a/textures/watershed_acacialing.png and /dev/null differ diff --git a/textures/watershed_acaciatree.png b/textures/watershed_acaciatree.png deleted file mode 100644 index 169823d..0000000 Binary files a/textures/watershed_acaciatree.png and /dev/null differ diff --git a/textures/watershed_acaciatreetop.png b/textures/watershed_acaciatreetop.png deleted file mode 100644 index 2cf5ef0..0000000 Binary files a/textures/watershed_acaciatreetop.png and /dev/null differ diff --git a/textures/watershed_acaciawood.png b/textures/watershed_acaciawood.png deleted file mode 100644 index f5e6a68..0000000 Binary files a/textures/watershed_acaciawood.png and /dev/null differ diff --git a/textures/watershed_bucketfreshwater.png b/textures/watershed_bucketfreshwater.png deleted file mode 100644 index 57500d6..0000000 Binary files a/textures/watershed_bucketfreshwater.png and /dev/null differ diff --git a/textures/watershed_cloud.png b/textures/watershed_cloud.png deleted file mode 100644 index 239dede..0000000 Binary files a/textures/watershed_cloud.png and /dev/null differ diff --git a/textures/watershed_drygrass.png b/textures/watershed_drygrass.png deleted file mode 100644 index a2c553a..0000000 Binary files a/textures/watershed_drygrass.png and /dev/null differ diff --git a/textures/watershed_freshice.png b/textures/watershed_freshice.png deleted file mode 100644 index bc1c285..0000000 Binary files a/textures/watershed_freshice.png and /dev/null differ diff --git a/textures/watershed_freshwater.png b/textures/watershed_freshwater.png deleted file mode 100644 index a4dfae0..0000000 Binary files a/textures/watershed_freshwater.png and /dev/null differ diff --git a/textures/watershed_freshwateranim.png b/textures/watershed_freshwateranim.png deleted file mode 100644 index ec35933..0000000 Binary files a/textures/watershed_freshwateranim.png and /dev/null differ diff --git a/textures/watershed_freshwaterflowanim.png b/textures/watershed_freshwaterflowanim.png deleted file mode 100644 index bb1b2a3..0000000 Binary files a/textures/watershed_freshwaterflowanim.png and /dev/null differ diff --git a/textures/watershed_goldengrass.png b/textures/watershed_goldengrass.png deleted file mode 100644 index 50f6a66..0000000 Binary files a/textures/watershed_goldengrass.png and /dev/null differ diff --git a/textures/watershed_icydirt.png b/textures/watershed_icydirt.png deleted file mode 100644 index 0c2868f..0000000 Binary files a/textures/watershed_icydirt.png and /dev/null differ diff --git a/textures/watershed_light.png b/textures/watershed_light.png deleted file mode 100644 index 43c1444..0000000 Binary files a/textures/watershed_light.png and /dev/null differ diff --git a/textures/watershed_luxcrystal.png b/textures/watershed_luxcrystal.png deleted file mode 100644 index a36c936..0000000 Binary files a/textures/watershed_luxcrystal.png and /dev/null differ diff --git a/textures/watershed_luxore.png b/textures/watershed_luxore.png deleted file mode 100644 index 9fc4830..0000000 Binary files a/textures/watershed_luxore.png and /dev/null differ diff --git a/textures/watershed_mixwater.png b/textures/watershed_mixwater.png deleted file mode 100644 index 3b55c5f..0000000 Binary files a/textures/watershed_mixwater.png and /dev/null differ diff --git a/textures/watershed_mixwateranim.png b/textures/watershed_mixwateranim.png deleted file mode 100644 index daa5653..0000000 Binary files a/textures/watershed_mixwateranim.png and /dev/null differ diff --git a/textures/watershed_mixwaterflowanim.png b/textures/watershed_mixwaterflowanim.png deleted file mode 100644 index 536acc5..0000000 Binary files a/textures/watershed_mixwaterflowanim.png and /dev/null differ diff --git a/textures/watershed_needles.png b/textures/watershed_needles.png deleted file mode 100644 index b814057..0000000 Binary files a/textures/watershed_needles.png and /dev/null differ diff --git a/textures/watershed_permafrost.png b/textures/watershed_permafrost.png deleted file mode 100644 index 086e1d8..0000000 Binary files a/textures/watershed_permafrost.png and /dev/null differ diff --git a/textures/watershed_pineling.png b/textures/watershed_pineling.png deleted file mode 100644 index cd8167a..0000000 Binary files a/textures/watershed_pineling.png and /dev/null differ diff --git a/textures/watershed_pinetree.png b/textures/watershed_pinetree.png deleted file mode 100644 index 5a2a8b2..0000000 Binary files a/textures/watershed_pinetree.png and /dev/null differ diff --git a/textures/watershed_pinetreetop.png b/textures/watershed_pinetreetop.png deleted file mode 100644 index 9e2f864..0000000 Binary files a/textures/watershed_pinetreetop.png and /dev/null differ diff --git a/textures/watershed_pinewood.png b/textures/watershed_pinewood.png deleted file mode 100644 index fa102ce..0000000 Binary files a/textures/watershed_pinewood.png and /dev/null differ diff --git a/textures/watershed_redcobble.png b/textures/watershed_redcobble.png deleted file mode 100644 index c09665f..0000000 Binary files a/textures/watershed_redcobble.png and /dev/null differ