diff --git a/init.lua b/init.lua index 770b9ce..64884be 100644 --- a/init.lua +++ b/init.lua @@ -198,6 +198,70 @@ function riesenpilz_glowshroom(pos) end +function riesenpilz_apple(pos) + local size = 5 + local a = size*2 + local b = size-1 + local red = "default:copperblock" + local brown = "default:desert_stone" + for l = -b, b, 1 do + for j = 1, a-1, 1 do + for k = -size, size, a do + minetest.env:add_node({x=pos.x+k, y=pos.y+j, z=pos.z+l}, {name=red}) + minetest.env:add_node({x=pos.x+l, y=pos.y+j, z=pos.z+k}, {name=red}) + end + end + for i = -b, b, 1 do + minetest.env:add_node({x=pos.x+i, y=pos.y, z=pos.z+l}, {name=red}) + minetest.env:add_node({x=pos.x+i, y=pos.y+a, z=pos.z+l}, {name=red}) + end + end + + for i = a+1, a+b, 1 do + minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z}, {name="default:tree"}) + end + + local c = pos.y+1 + for i = -3,1,1 do + minetest.env:add_node({x=pos.x+i, y=c, z=pos.z+1}, {name=brown}) + end + for i = 0,1,1 do + minetest.env:add_node({x=pos.x+1+i, y=c, z=pos.z-1-i}, {name=brown}) + minetest.env:add_node({x=pos.x+2+i, y=c, z=pos.z-1-i}, {name=brown}) + end + minetest.env:add_node({x=pos.x+1, y=c, z=pos.z}, {name=brown}) + minetest.env:add_node({x=pos.x-3, y=c+1, z=pos.z+1}, {name=brown}) +end + + + +--3D apple [3apple] + + +minetest.register_node(":default:apple", { + description = "Apple", + drawtype = "nodebox", + visual_scale = 1.0, + tiles = {"3apple_apple_top.png","3apple_apple_bottom.png","3apple_apple.png"}, + inventory_image = "default_apple.png", + paramtype = "light", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-3/16, -7/16, -3/16, 3/16, 1/16, 3/16}, + {-1/4, -3/8, -3/16, 1/4, 0, 3/16}, + {-3/16, -3/8, -1/4, 3/16, 0, 1/4}, + {0, 1/16, -1/16, 1/16, 1/4, 0}, + {-1/16, 1/16, 0, 0, 1/4, 1/16}, + } + }, + groups = {fleshy=3,dig_immediate=3,flammable=2}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_defaults(), +}) + + --Mushroom Nodes @@ -347,6 +411,8 @@ minetest.register_on_punchnode(function(pos, node, puncher) riesenpilz_lavashroom(pos) elseif minetest.env:get_node(pos).name == "riesenpilz:glowshroom" then riesenpilz_glowshroom(pos) + elseif minetest.env:get_node(pos).name == "default:apple" then + riesenpilz_apple(pos) end end end) diff --git a/mapgen.lua b/mapgen.lua index 175a553..e29b917 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -1,3 +1,32 @@ +--[[ +function riesenpilz_circle(nam, pos, radius, rand, seed) + local ra = seed + for i = -radius, radius, 1 do + for j = -radius, radius, 1 do + if math.floor( math.sqrt(i^2+j^2) +0.5) == radius then + random = PseudoRandom(ra) + p={x=pos.x+i, y=pos.y, z=pos.z+j} + if minetest.env:get_node(p).name == "air" + and random:next(1,rand) == 1 + and minetest.env:get_node({x=pos.x+i, y=pos.y-1, z=pos.z+j}).name ~= "air" then + minetest.env:add_node(p, {name=nam}) + end + ra = ra+1 + end + end + end +end + elseif pr:next(1,80) == 1 then + riesenpilz_circle("riesenpilz:brown", boden, pr:next(2,3), 3, seed) + elseif pr:next(1,90) == 1 then + riesenpilz_circle("riesenpilz:red", boden, pr:next(3,4), 3, seed) + elseif pr:next(1,100) == 1 then + riesenpilz_circle("riesenpilz:fly_agaric", boden, 3, 3, seed) + elseif pr:next(1,4000) == 1 then + riesenpilz_circle("riesenpilz:lavashroom", boden, pr:next(4,5), 3, seed) + elseif pr:next(1,5000) == 1 then + riesenpilz_circle("riesenpilz:glowshroom", boden, 2, 3, seed) +]] local function find_ground(pos, nodes) for _, evground in ipairs(nodes) do if minetest.env:get_node(pos).name == evground then @@ -106,4 +135,45 @@ minetest.register_on_generated(function(minp, maxp, seed) end end end + if maxp.y < -10 then + local x0,z0,x1,z1 = minp.x,minp.z,maxp.x,maxp.z -- Assume X and Z lengths are equal + local env = minetest.env --Should make things a bit faster. + local perlin1 = env:get_perlin(11,3, 0.5, 200) --Get map specific perlin + + --[[if not (perlin1:get2d({x=x0, y=z0}) > 0.53) and not (perlin1:get2d({x=x1, y=z1}) > 0.53) + and not (perlin1:get2d({x=x0, y=z1}) > 0.53) and not (perlin1:get2d({x=x1, y=z0}) > 0.53) + and not (perlin1:get2d({x=(x1-x0)/2, y=(z1-z0)/2}) > 0.53) then]] + if not ( perlin1:get2d( {x=x0, y=z0} ) > 0.53 ) --top left + and not ( perlin1:get2d( { x = x0 + ( (x1-x0)/2), y=z0 } ) > 0.53 )--top middle + and not (perlin1:get2d({x=x1, y=z1}) > 0.53) --bottom right + and not (perlin1:get2d({x=x1, y=z0+((z1-z0)/2)}) > 0.53) --right middle + and not (perlin1:get2d({x=x0, y=z1}) > 0.53) --bottom left + and not (perlin1:get2d({x=x1, y=z0}) > 0.53) --top right + and not (perlin1:get2d({x=x0+((x1-x0)/2), y=z1}) > 0.53) --left middle + and not (perlin1:get2d({x=(x1-x0)/2, y=(z1-z0)/2}) > 0.53) --middle + and not (perlin1:get2d({x=x0, y=z1+((z1-z0)/2)}) > 0.53) then --bottom middle + print("abortsumpf") + return + end + local divs = (maxp.x-minp.x); + local pr = PseudoRandom(seed+68) + + for j=0,divs do + for i=0,divs do + local x,z = x0+i,z0+j + + for y=minp.y,maxp.y,1 do + local pos = {x=x, y=y, z=z} + + if env:get_node(pos).name == "air" + and env:get_node({x=x, y=y-1, z=z}).name == "default:stone" + and pr:next(1,40) == 33 + and env:find_node_near(pos, 4, "group:igniter") + and not env:find_node_near(pos, 3, "group:igniter") then + env:add_node(pos, {name="riesenpilz:lavashroom"}) + end + end + end + end + end end) diff --git a/textures/3apple_apple.png b/textures/3apple_apple.png new file mode 100644 index 0000000..2e7b5c1 Binary files /dev/null and b/textures/3apple_apple.png differ diff --git a/textures/3apple_apple_bottom.png b/textures/3apple_apple_bottom.png new file mode 100644 index 0000000..b003ba4 Binary files /dev/null and b/textures/3apple_apple_bottom.png differ diff --git a/textures/3apple_apple_top.png b/textures/3apple_apple_top.png new file mode 100644 index 0000000..2ccbf7e Binary files /dev/null and b/textures/3apple_apple_top.png differ