0
mods/riesenpilz/rest/ 😿 → mods/riesenpilz/
/ 😿
Executable file → Normal file
BIN
mods/riesenpilz/
/caverealms_fungi.png
Normal file
After Width: | Height: | Size: 249 B |
BIN
mods/riesenpilz/
/caverealms_mycena.png
Normal file
After Width: | Height: | Size: 356 B |
0
mods/riesenpilz/rest/frying.mp3 → mods/riesenpilz/
/frying.mp3
Executable file → Normal file
0
mods/riesenpilz/rest/info.txt → mods/riesenpilz/
/info.txt
Executable file → Normal file
BIN
mods/riesenpilz/
/mush45_b.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
mods/riesenpilz/
/mush45_b0.png
Normal file
After Width: | Height: | Size: 234 B |
BIN
mods/riesenpilz/
/mush45_b1.png
Normal file
After Width: | Height: | Size: 210 B |
BIN
mods/riesenpilz/
/mush45_b2.png
Normal file
After Width: | Height: | Size: 257 B |
BIN
mods/riesenpilz/
/mush45_bm.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
mods/riesenpilz/
/mush45_bm2.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
mods/riesenpilz/
/mush45_bm3.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
mods/riesenpilz/
/mush45_bm4.png
Normal file
After Width: | Height: | Size: 211 B |
BIN
mods/riesenpilz/
/mush45_r.png
Normal file
After Width: | Height: | Size: 233 B |
BIN
mods/riesenpilz/
/mush45_r0.png
Normal file
After Width: | Height: | Size: 234 B |
BIN
mods/riesenpilz/
/mush45_rm.png
Normal file
After Width: | Height: | Size: 234 B |
BIN
mods/riesenpilz/
/mush45_rm2.png
Normal file
After Width: | Height: | Size: 239 B |
BIN
mods/riesenpilz/
/mush45_rm3.png
Normal file
After Width: | Height: | Size: 234 B |
BIN
mods/riesenpilz/
/mush45_rm4.png
Normal file
After Width: | Height: | Size: 238 B |
BIN
mods/riesenpilz/
/mushrooms_mushroom_brown.png
Normal file
After Width: | Height: | Size: 303 B |
BIN
mods/riesenpilz/
/mushrooms_mushroom_red.png
Normal file
After Width: | Height: | Size: 276 B |
0
mods/riesenpilz/rest/old_mapgen.lua → mods/riesenpilz/
/old_mapgen.lua
Executable file → Normal file
BIN
mods/riesenpilz/
/riesenpilz_head.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
0
mods/riesenpilz/rest/smallhead.1.ogg → mods/riesenpilz/
/smallhead.1.ogg
Executable file → Normal file
|
@ -2,3 +2,5 @@
|
|||
— glowshroom and lavashroom from bas080's plants mod (WTFPL)
|
||||
— parasol mushroom from a mod called mushrooms (WTFPL)
|
||||
— "45" mushrooms from r01922090's mush45 mod (WTFPL)
|
||||
|
||||
rest also WTFPL
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
[Mod] riesenpilz [riesenpilz]
|
||||
[Mod] mushrooms [riesenpilz]
|
||||
|
||||
This mod adds mushrooms to minetest. The growing tool can make them giant.
|
||||
|
||||
**Depends:** see [depends.txt](https://raw.githubusercontent.com/HybridDog/riesenpilz/master/depends.txt)
|
||||
**License:** see [LICENSE.txt](https://raw.githubusercontent.com/HybridDog/riesenpilz/master/LICENSE.txt)
|
||||
|
@ -11,4 +13,6 @@ If you got ideas or found bugs, please tell them to me.
|
|||
|
||||
TODO:
|
||||
— add more giant mushrooms
|
||||
— finish supporting the mushrooms mod
|
||||
— finish supporting the mushrooms mod
|
||||
— add lava suit
|
||||
— eating must become possible
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
default
|
||||
vector_extras
|
||||
fence_registration?
|
||||
watershed?
|
||||
|
|
|
@ -2,11 +2,12 @@ local load_time_start = os.clock()
|
|||
local MAX_SIZE = 3
|
||||
|
||||
riesenpilz = {}
|
||||
dofile(minetest.get_modpath("riesenpilz").."/settings.lua")
|
||||
dofile(minetest.get_modpath("riesenpilz").."/functions.lua")
|
||||
local modpath = minetest.get_modpath("riesenpilz").."/"
|
||||
dofile(modpath.."settings.lua")
|
||||
dofile(modpath.."functions.lua")
|
||||
|
||||
|
||||
--Growing Functions
|
||||
-- Growing Functions
|
||||
|
||||
local function r_area(manip, width, height, pos)
|
||||
local emerged_pos1, emerged_pos2 = manip:read_from_map(
|
||||
|
@ -19,13 +20,14 @@ end
|
|||
local function set_vm_data(manip, nodes, pos, t1, name)
|
||||
manip:set_data(nodes)
|
||||
manip:write_to_map()
|
||||
riesenpilz.inform("a "..name.." mushroom grew at ("..pos.x.."|"..pos.y.."|"..pos.z..")", 3, t1)
|
||||
riesenpilz.inform("a giant "..name.." mushroom grew at "..vector.pos_to_string(pos), 3, t1)
|
||||
local t1 = os.clock()
|
||||
manip:update_map()
|
||||
riesenpilz.inform("map updated", 3, t1)
|
||||
end
|
||||
|
||||
|
||||
-- contents become added later
|
||||
local c
|
||||
|
||||
function riesenpilz.red(pos, nodes, area, w)
|
||||
|
@ -143,7 +145,7 @@ local function riesenpilz_minecraft_fliegenpilz(pos)
|
|||
manip:set_param2_data(param2s)
|
||||
manip:write_to_map()
|
||||
manip:update_map()
|
||||
riesenpilz.inform("a fly agaric grew at ("..pos.x.."|"..pos.y.."|"..pos.z..")", 3, t1)
|
||||
riesenpilz.inform("a fly agaric grew at "..vector.pos_to_string(pos), 3, t1)
|
||||
end
|
||||
|
||||
|
||||
|
@ -280,7 +282,7 @@ function riesenpilz.parasol(pos, nodes, area, w, h)
|
|||
nodes[i] = c.stem
|
||||
end
|
||||
|
||||
local w = w or math.random(MAX_SIZE+1,MAX_SIZE+2)
|
||||
local w = w or MAX_SIZE+math.random(2)
|
||||
local bhead1 = w-1
|
||||
local bhead2 = math.random(1,w-2)
|
||||
|
||||
|
@ -313,7 +315,7 @@ end
|
|||
local function riesenpilz_parasol(pos)
|
||||
local t1 = os.clock()
|
||||
|
||||
local w = math.random(MAX_SIZE+1,MAX_SIZE+2)
|
||||
local w = MAX_SIZE+math.random(2)
|
||||
local h = 6+math.random(MAX_SIZE)
|
||||
|
||||
local manip = minetest.get_voxel_manip()
|
||||
|
@ -326,6 +328,86 @@ local function riesenpilz_parasol(pos)
|
|||
end
|
||||
|
||||
|
||||
function riesenpilz.red45(pos, nodes, area, h1, h2)
|
||||
local walkspace = h1 or math.random(2,MAX_SIZE)
|
||||
local toph = h2 or math.random(MAX_SIZE)
|
||||
local h = walkspace+toph+4
|
||||
|
||||
-- stem
|
||||
for i in area:iterp(pos, {x=pos.x, y=pos.y+h, z=pos.z}) do
|
||||
nodes[i] = c.stem_red
|
||||
end
|
||||
|
||||
for i = -1,1,2 do
|
||||
for l = 0, 1 do
|
||||
if math.random(2) == 1 then
|
||||
nodes[area:index(pos.x+i, pos.y, pos.z-l*i)] = c.stem_red
|
||||
if math.random(2) == 1 then
|
||||
nodes[area:index(pos.x+i, pos.y+1, pos.z-l*i)] = c.stem_red
|
||||
end
|
||||
end
|
||||
if math.random(2) == 1 then
|
||||
nodes[area:index(pos.x+l*i, pos.y, pos.z+i)] = c.stem_red
|
||||
if math.random(2) == 1 then
|
||||
nodes[area:index(pos.x+l*i, pos.y+1, pos.z+i)] = c.stem_red
|
||||
end
|
||||
end
|
||||
nodes[area:index(pos.x+i, pos.y+walkspace+2, pos.z-l*i)] = c.head_red
|
||||
nodes[area:index(pos.x+l*i, pos.y+walkspace+2, pos.z+i)] = c.head_red
|
||||
end
|
||||
nodes[area:index(pos.x, pos.y+walkspace+3, pos.z+i)] = c.head_red
|
||||
nodes[area:index(pos.x+i, pos.y+walkspace+3, pos.z)] = c.head_red
|
||||
for j = -1,1,2 do
|
||||
nodes[area:index(pos.x+j, pos.y+walkspace+1, pos.z+i)] = c.head_red
|
||||
nodes[area:index(pos.x+j*3, pos.y+walkspace+1, pos.z+i*3)] = c.head_red
|
||||
for z = 1,2 do
|
||||
for x = 1,2 do
|
||||
for y = h-toph, h-1 do
|
||||
nodes[area:index(pos.x+x*j, pos.y+y, pos.z+z*i)] = c.head_red
|
||||
end
|
||||
if z ~= 2
|
||||
or x ~= 2
|
||||
or math.random(4) ~= 2 then
|
||||
nodes[area:index(pos.x+x*j, pos.y+h, pos.z+z*i)] = c.head_red
|
||||
end
|
||||
local z = z+1
|
||||
x = x+1
|
||||
nodes[area:index(pos.x+x*j, pos.y+walkspace+2, pos.z+z*i)] = c.head_red
|
||||
if z ~= 3
|
||||
or x ~= 3
|
||||
or math.random(2) == 1 then
|
||||
nodes[area:index(pos.x+x*j, pos.y+walkspace+3, pos.z+z*i)] = c.head_red
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- top
|
||||
for z = -1,1 do
|
||||
for x = -1,1 do
|
||||
nodes[area:index(pos.x+x, pos.y+h+1, pos.z+z)] = c.head_red
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function riesenpilz_red45(pos)
|
||||
local t1 = os.clock()
|
||||
|
||||
local h1 = math.random(2,MAX_SIZE)
|
||||
local h2 = math.random(MAX_SIZE)
|
||||
local h = h1+h2+5
|
||||
|
||||
local manip = minetest.get_voxel_manip()
|
||||
local area = r_area(manip, 3, h, pos)
|
||||
local nodes = manip:get_data()
|
||||
|
||||
riesenpilz.red45(pos, nodes, area, h1, h2)
|
||||
|
||||
set_vm_data(manip, nodes, pos, t1, "red45")
|
||||
end
|
||||
|
||||
|
||||
function riesenpilz.apple(pos, nodes, area)
|
||||
local size = 5
|
||||
local a = size*2
|
||||
|
@ -371,40 +453,45 @@ local function riesenpilz_apple(pos)
|
|||
|
||||
manip:set_data(nodes)
|
||||
manip:write_to_map()
|
||||
riesenpilz.inform("an apple grew at ("..pos.x.."|"..pos.y.."|"..pos.z..")", 3, t1)
|
||||
riesenpilz.inform("an apple grew at "..vector.pos_to_string(pos), 3, t1)
|
||||
manip:update_map()
|
||||
end
|
||||
|
||||
|
||||
|
||||
--3D apple [3apple]
|
||||
-- 3D apple [3apple]
|
||||
|
||||
|
||||
minetest.override_item("default:apple", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"3apple_apple_top.png","3apple_apple_bottom.png","3apple_apple.png"},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-3/16, -7/16, -3/16, 3/16, 1/16, 3/16},
|
||||
{-4/16, -6/16, -3/16, 4/16, 0, 3/16},
|
||||
{-3/16, -6/16, -4/16, 3/16, 0, 4/16},
|
||||
{-1/32, 1/16, -1/32, 1/32, 4/16, 1/32},
|
||||
{-1/16, 1.6/16, 0, 1/16, 1.8/16, 1/16},
|
||||
{-2/16, 1.4/16, 1/16, 1/16, 1.6/16, 2/16},
|
||||
{-2/16, 1.2/16, 2/16, 0, 1.4/16, 3/16},
|
||||
{-1.5/16, 1/16, .5/16, 0.5/16, 1.2/16, 2.5/16},
|
||||
}
|
||||
},
|
||||
})
|
||||
if riesenpilz.change_apple then
|
||||
minetest.override_item("default:apple", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"3apple_apple_top.png", "3apple_apple_bottom.png", "3apple_apple.png"},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-3/16, -7/16, -3/16, 3/16, 1/16, 3/16},
|
||||
{-4/16, -6/16, -3/16, 4/16, 0, 3/16},
|
||||
{-3/16, -6/16, -4/16, 3/16, 0, 4/16},
|
||||
{-1/32, 1/16, -1/32, 1/32, 4/16, 1/32},
|
||||
{-1/16, 1.6/16, 0, 1/16, 1.8/16, 1/16},
|
||||
{-2/16, 1.4/16, 1/16, 1/16, 1.6/16, 2/16},
|
||||
{-2/16, 1.2/16, 2/16, 0, 1.4/16, 3/16},
|
||||
{-1.5/16, 1/16, .5/16, 0.5/16, 1.2/16, 2.5/16},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
|
||||
--Mushroom Nodes
|
||||
-- Mushroom Nodes
|
||||
|
||||
|
||||
local mushrooms_list = {
|
||||
["brown"] = {
|
||||
local abm_allowed = true
|
||||
local disallowed_ps = {}
|
||||
|
||||
for name,i in pairs({
|
||||
brown = {
|
||||
description = "brown mushroom",
|
||||
box = {
|
||||
{-0.15, -0.2, -0.15, 0.15, -0.1, 0.15},
|
||||
|
@ -420,7 +507,7 @@ local mushrooms_list = {
|
|||
chance = 18,
|
||||
},
|
||||
},
|
||||
["red"] = {
|
||||
red = {
|
||||
description = "red mushroom",
|
||||
box = {
|
||||
{-1/16, -8/16, -1/16, 1/16, -6/16, 1/16},
|
||||
|
@ -438,7 +525,7 @@ local mushrooms_list = {
|
|||
chance = 30,
|
||||
},
|
||||
},
|
||||
["fly_agaric"] = {
|
||||
fly_agaric = {
|
||||
description = "fly agaric",
|
||||
box = {
|
||||
{-0.05, -0.5, -0.05, 0.05, 1/20, 0.05},
|
||||
|
@ -454,7 +541,7 @@ local mushrooms_list = {
|
|||
chance = 30,
|
||||
},
|
||||
},
|
||||
["lavashroom"] = {
|
||||
lavashroom = {
|
||||
description = "Lavashroom",
|
||||
box = {
|
||||
{-1/16, -8/16, -1/16, 1/16, -6/16, 1/16},
|
||||
|
@ -471,16 +558,16 @@ local mushrooms_list = {
|
|||
chance = 60,
|
||||
},
|
||||
},
|
||||
["glowshroom"] = {
|
||||
glowshroom = {
|
||||
description = "Glowshroom",
|
||||
box = {
|
||||
{-1/16, -8/16, -1/16, 1/16, -1/16, 1/16},
|
||||
{-2/16, -3/16, -2/16, 2/16, -2/16, 2/16},
|
||||
{-3/16, -5/16, -3/16, 3/16, -3/16, 3/16},
|
||||
{-1/16, -8/16, -1/16, 1/16, -1/16, 1/16},
|
||||
{-2/16, -3/16, -2/16, 2/16, -2/16, 2/16},
|
||||
{-3/16, -5/16, -3/16, 3/16, -3/16, 3/16},
|
||||
{-3/16, -7/16, -3/16, -2/16, -5/16, -2/16},
|
||||
{3/16, -7/16, -3/16, 2/16, -5/16, -2/16},
|
||||
{-3/16, -7/16, 3/16, -2/16, -5/16, 2/16},
|
||||
{3/16, -7/16, 3/16, 2/16, -5/16, 2/16}
|
||||
{3/16, -7/16, -3/16, 2/16, -5/16, -2/16},
|
||||
{-3/16, -7/16, 3/16, -2/16, -5/16, 2/16},
|
||||
{3/16, -7/16, 3/16, 2/16, -5/16, 2/16}
|
||||
},
|
||||
growing = {
|
||||
r = 3,
|
||||
|
@ -491,7 +578,7 @@ local mushrooms_list = {
|
|||
chance = 320,
|
||||
},
|
||||
},
|
||||
["nether_shroom"] = {
|
||||
nether_shroom = {
|
||||
description = "Nether mushroom",
|
||||
box = {
|
||||
{-1/16, -8/16, -1/16, 1/16, -2/16, 1/16},
|
||||
|
@ -504,7 +591,7 @@ local mushrooms_list = {
|
|||
},
|
||||
burntime = 6,
|
||||
},
|
||||
["parasol"] = {
|
||||
parasol = {
|
||||
description = "white parasol mushroom",
|
||||
box = {
|
||||
{-1/16, -8/16, -1/16, 1/16, 0, 1/16},
|
||||
|
@ -522,15 +609,15 @@ local mushrooms_list = {
|
|||
chance = 36,
|
||||
},
|
||||
},
|
||||
["red45"] = {
|
||||
red45 = {
|
||||
description = "45 red mushroom",
|
||||
box = {
|
||||
{-1/16, -0.5, -1/16, 1/16, 1/8, 1/16},
|
||||
{-3/16, 1/8, -3/16, 3/16, 1/4, 3/16},
|
||||
{-1/16, -0.5, -1/16, 1/16, 1/8, 1/16},
|
||||
{-3/16, 1/8, -3/16, 3/16, 1/4, 3/16},
|
||||
{-5/16, -1/4, -5/16, -1/16, 1/8, -1/16},
|
||||
{1/16, -1/4, -5/16, 5/16, 1/8, -1/16},
|
||||
{-5/16, -1/4, 1/16, -1/16, 1/8, 5/16},
|
||||
{1/16, -1/4, 1/16, 5/16, 1/8, 5/16}
|
||||
{1/16, -1/4, -5/16, 5/16, 1/8, -1/16},
|
||||
{-5/16, -1/4, 1/16, -1/16, 1/8, 5/16},
|
||||
{1/16, -1/4, 1/16, 5/16, 1/8, 5/16}
|
||||
},
|
||||
growing = {
|
||||
r = {min=3, max=4},
|
||||
|
@ -541,14 +628,14 @@ local mushrooms_list = {
|
|||
chance = 180,
|
||||
},
|
||||
},
|
||||
["brown45"] = {
|
||||
brown45 = {
|
||||
description = "45 brown mushroom",
|
||||
box = {
|
||||
{-1/16, -0.5, -1/16, 1/16, 1/16, 1/16},
|
||||
{-3/8, 1/8, -7/16, 3/8, 1/4, 7/16},
|
||||
{-7/16, 1/8, -3/8, 7/16, 1/4, 3/8},
|
||||
{-3/8, 1/4, -3/8, 3/8, 5/16, 3/8},
|
||||
{-3/8, 1/16, -3/8, 3/8, 1/8, 3/8}
|
||||
{-3/8, 1/8, -7/16, 3/8, 1/4, 7/16},
|
||||
{-7/16, 1/8, -3/8, 7/16, 1/4, 3/8},
|
||||
{-3/8, 1/4, -3/8, 3/8, 5/16, 3/8},
|
||||
{-3/8, 1/16, -3/8, 3/8, 1/8, 3/8}
|
||||
},
|
||||
growing = {
|
||||
r = {min=2, max=3},
|
||||
|
@ -559,11 +646,7 @@ local mushrooms_list = {
|
|||
chance = 20,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local abm_allowed = true
|
||||
local disallowed_ps = {}
|
||||
for name,i in pairs(mushrooms_list) do
|
||||
}) do
|
||||
local burntime = i.burntime or 1
|
||||
local box = {
|
||||
type = "fixed",
|
||||
|
@ -737,10 +820,19 @@ end)
|
|||
|
||||
|
||||
|
||||
--Mushroom Nodes
|
||||
-- Big Mushroom Nodes
|
||||
|
||||
|
||||
local pilznode_list = {
|
||||
local head_sounds = default.node_sound_wood_defaults({
|
||||
footstep = {name="riesenpilz_head", gain=0.1},
|
||||
place = {name="default_place_node", gain=0.5},
|
||||
dig = {name="riesenpilz_head", gain=0.2},
|
||||
dug = {name="riesenpilz_stem", gain=0.1}
|
||||
})
|
||||
local add_fence = minetest.register_fence
|
||||
local node_groups = {oddly_breakable_by_hand=3, fall_damage_add_percent=-80, bouncy=10}
|
||||
|
||||
for _,i in pairs({
|
||||
{
|
||||
typ = "stem",
|
||||
description = "white",
|
||||
|
@ -750,11 +842,18 @@ local pilznode_list = {
|
|||
typ = "stem",
|
||||
name = "brown",
|
||||
textures = {"stem_top.png", "stem_top.png", "stem_brown.png"},
|
||||
fence = false,
|
||||
},
|
||||
{
|
||||
typ = "stem",
|
||||
name = "blue",
|
||||
textures = {"stem_top.png","stem_top.png","stem_blue.png"},
|
||||
fence = false,
|
||||
},
|
||||
{
|
||||
typ = "stem",
|
||||
name = "red",
|
||||
textures = {"stem_red45_top.png","stem_red45_top.png","stem_red45.png"},
|
||||
},
|
||||
{
|
||||
name = "lamellas",
|
||||
|
@ -784,14 +883,15 @@ local pilznode_list = {
|
|||
typ = "head",
|
||||
name = "brown",
|
||||
textures = {"brown_top.png", "lamellas.png", "brown_top.png"},
|
||||
sapling = "brown"
|
||||
sapling = "brown",
|
||||
},
|
||||
{
|
||||
typ = "head",
|
||||
name = "brown_full",
|
||||
description = "full brown",
|
||||
textures = "brown_top.png",
|
||||
sapling = "brown"
|
||||
sapling = "brown",
|
||||
fence = false,
|
||||
},
|
||||
{
|
||||
typ = "head",
|
||||
|
@ -825,16 +925,7 @@ local pilznode_list = {
|
|||
textures = {"head_brown_bright.png", "head_white.png", "head_brown_bright.png"},
|
||||
sapling = "parasol"
|
||||
},
|
||||
}
|
||||
|
||||
local head_sounds = default.node_sound_wood_defaults({
|
||||
footstep = {name="riesenpilz_head", gain=0.1},
|
||||
place = {name="default_place_node", gain=0.5},
|
||||
dig = {name="riesenpilz_head", gain=0.2},
|
||||
dug = {name="riesenpilz_stem", gain=0.1}
|
||||
})
|
||||
|
||||
for _,i in pairs(pilznode_list) do
|
||||
}) do
|
||||
-- fill missing stuff
|
||||
local textures = i.textures
|
||||
i.description = i.description or i.name
|
||||
|
@ -870,10 +961,15 @@ for _,i in pairs(pilznode_list) do
|
|||
minetest.register_node(nodename, {
|
||||
description = desctiption,
|
||||
tiles = textures,
|
||||
groups = {oddly_breakable_by_hand=3, fall_damage_add_percent=-80},
|
||||
groups = node_groups,
|
||||
drop = drop,
|
||||
sounds = sounds,
|
||||
})
|
||||
|
||||
if add_fence
|
||||
and i.fence ~= false then
|
||||
add_fence({fence_of = nodename})
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("riesenpilz:head_red_side", {
|
||||
|
@ -881,7 +977,7 @@ minetest.register_node("riesenpilz:head_red_side", {
|
|||
tiles = {"riesenpilz_head.png", "riesenpilz_lamellas.png", "riesenpilz_head.png",
|
||||
"riesenpilz_head.png", "riesenpilz_head.png", "riesenpilz_lamellas.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {oddly_breakable_by_hand=3, fall_damage_add_percent=-80},
|
||||
groups = node_groups,
|
||||
drop = {max_items = 1,
|
||||
items = {{items = {"riesenpilz:fly_agaric"},rarity = 20,},
|
||||
{items = {"riesenpilz:head_red"},rarity = 1,}}},
|
||||
|
@ -892,7 +988,9 @@ minetest.register_node("riesenpilz:head_red_side", {
|
|||
|
||||
minetest.register_node("riesenpilz:ground", {
|
||||
description = "dirt with rotten grass",
|
||||
tiles = {"riesenpilz_ground_top.png","default_dirt.png","default_dirt.png^riesenpilz_ground_side.png"},
|
||||
tiles = {"riesenpilz_ground_top.png","default_dirt.png",
|
||||
{name="default_dirt.png^riesenpilz_ground_side.png", tileable_vertical = false}
|
||||
},
|
||||
groups = {crumbly=3},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
drop = 'default:dirt'
|
||||
|
@ -923,6 +1021,8 @@ c = {
|
|||
head_binge = minetest.get_content_id("riesenpilz:head_binge"),
|
||||
head_brown_bright = minetest.get_content_id("riesenpilz:head_brown_bright"),
|
||||
|
||||
stem_red = minetest.get_content_id("riesenpilz:stem_red"),
|
||||
|
||||
red = minetest.get_content_id("default:copperblock"),
|
||||
brown = minetest.get_content_id("default:desert_stone"),
|
||||
tree = minetest.get_content_id("default:tree"),
|
||||
|
@ -930,7 +1030,7 @@ c = {
|
|||
|
||||
|
||||
|
||||
--Growing
|
||||
-- Growing
|
||||
|
||||
|
||||
minetest.register_tool("riesenpilz:growingtool", {
|
||||
|
@ -938,31 +1038,61 @@ minetest.register_tool("riesenpilz:growingtool", {
|
|||
inventory_image = "riesenpilz_growingtool.png",
|
||||
})
|
||||
|
||||
minetest.register_on_punchnode(function(pos, node, puncher)
|
||||
if puncher:get_wielded_item():get_name() == "riesenpilz:growingtool" then
|
||||
local name = node.name
|
||||
if name == "riesenpilz:red" then
|
||||
riesenpilz_hybridpilz(pos)
|
||||
elseif name == "riesenpilz:fly_agaric" then
|
||||
riesenpilz_minecraft_fliegenpilz(pos)
|
||||
elseif name == "riesenpilz:brown" then
|
||||
riesenpilz_brauner_minecraftpilz(pos)
|
||||
elseif name == "riesenpilz:lavashroom" then
|
||||
riesenpilz_lavashroom(pos)
|
||||
elseif name == "riesenpilz:glowshroom" then
|
||||
riesenpilz_glowshroom(pos)
|
||||
elseif name == "riesenpilz:parasol" then
|
||||
riesenpilz_parasol(pos)
|
||||
elseif name == "default:apple" then
|
||||
riesenpilz_apple(pos)
|
||||
end
|
||||
minetest.register_on_punchnode(function(pos, node, player)
|
||||
if player:get_wielded_item():get_name() ~= "riesenpilz:growingtool"
|
||||
or minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
local name = node.name
|
||||
if name == "riesenpilz:red" then
|
||||
riesenpilz_hybridpilz(pos)
|
||||
elseif name == "riesenpilz:fly_agaric" then
|
||||
riesenpilz_minecraft_fliegenpilz(pos)
|
||||
elseif name == "riesenpilz:brown" then
|
||||
riesenpilz_brauner_minecraftpilz(pos)
|
||||
elseif name == "riesenpilz:lavashroom" then
|
||||
riesenpilz_lavashroom(pos)
|
||||
elseif name == "riesenpilz:glowshroom" then
|
||||
riesenpilz_glowshroom(pos)
|
||||
elseif name == "riesenpilz:parasol" then
|
||||
riesenpilz_parasol(pos)
|
||||
elseif name == "riesenpilz:red45" then
|
||||
riesenpilz_red45(pos)
|
||||
elseif name == "default:apple" then
|
||||
riesenpilz_apple(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- Food
|
||||
|
||||
|
||||
minetest.register_craftitem("riesenpilz:mush45_meal", {
|
||||
description = "Mushroom Meal",
|
||||
inventory_image = "riesenpilz_mush45_meal.png",
|
||||
on_use = minetest.item_eat(6),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "riesenpilz:mush45_meal 4",
|
||||
recipe = {
|
||||
{"riesenpilz:brown45", "riesenpilz:red45"},
|
||||
{"riesenpilz:red45", "riesenpilz:brown45"},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
if riesenpilz.enable_mapgen then
|
||||
dofile(minetest.get_modpath("riesenpilz") .. "/mapgen.lua")
|
||||
dofile(modpath.."mapgen.lua")
|
||||
end
|
||||
|
||||
riesenpilz.inform("loaded", 1, load_time_start)
|
||||
local time = math.floor(tonumber(os.clock()-load_time_start)*100+0.5)/100
|
||||
local msg = "[riesenpilz] loaded after ca. "..time
|
||||
if time > 0.05 then
|
||||
minetest.log("warning", msg)
|
||||
else
|
||||
minetest.log("info", msg)
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local minetest = minetest --Should make things a bit faster.
|
||||
|
||||
local c
|
||||
local function define_contents()
|
||||
c = {
|
||||
|
@ -74,15 +76,25 @@ local function say_info(info)
|
|||
minetest.chat_send_all(info)
|
||||
end
|
||||
|
||||
local riesenpilz_rarity = riesenpilz.mapgen_rarity
|
||||
local riesenpilz_size = riesenpilz.mapgen_size
|
||||
local smooth_trans_size = riesenpilz.smooth_trans_size
|
||||
-- perlin noise "hills" are not peaks but looking like sinus curve
|
||||
local function upper_rarity(rarity)
|
||||
return math.sign(rarity)*math.sin(math.abs(rarity)*math.pi/2)
|
||||
end
|
||||
|
||||
local nosmooth_rarity = 1-riesenpilz_rarity/50
|
||||
local perlin_scale = riesenpilz_size*100/riesenpilz_rarity
|
||||
local smooth_rarity_max = nosmooth_rarity+smooth_trans_size*2/perlin_scale
|
||||
local smooth_rarity_min = nosmooth_rarity-smooth_trans_size/perlin_scale
|
||||
local smooth_rarity_dif = smooth_rarity_max-smooth_rarity_min
|
||||
local rarity = riesenpilz.mapgen_rarity
|
||||
local riesenpilz_size = riesenpilz.mapgen_size
|
||||
|
||||
local nosmooth_rarity = 1-rarity/50
|
||||
local perlin_scale = riesenpilz_size*100/rarity
|
||||
local smooth_rarity_max, smooth_rarity_min, smooth_rarity_dif
|
||||
local smooth = riesenpilz.smooth
|
||||
if smooth then
|
||||
local smooth_trans_size = riesenpilz.smooth_trans_size
|
||||
smooth_rarity_max = upper_rarity(nosmooth_rarity+smooth_trans_size*2/perlin_scale)
|
||||
smooth_rarity_min = upper_rarity(nosmooth_rarity-smooth_trans_size/perlin_scale)
|
||||
smooth_rarity_dif = smooth_rarity_max-smooth_rarity_min
|
||||
end
|
||||
nosmooth_rarity = upper_rarity(nosmooth_rarity)
|
||||
|
||||
--local USUAL_STUFF = {"default:leaves","default:apple","default:tree","default:cactus","default:papyrus"}
|
||||
|
||||
|
@ -94,8 +106,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
end
|
||||
|
||||
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(51,3, 0.5, perlin_scale) --Get map specific perlin
|
||||
local perlin1 = minetest.get_perlin(51,3, 0.5, perlin_scale) --Get map specific perlin
|
||||
|
||||
if not riesenpilz.always_generate then
|
||||
local biome_allowed
|
||||
|
@ -115,23 +126,6 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
end
|
||||
end
|
||||
|
||||
--[[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 riesenpilz.always_generate
|
||||
and not ( perlin1:get2d( {x=x0, y=z0} ) > nosmooth_rarity ) --top left
|
||||
and not ( perlin1:get2d( { x = x0 + ( (x1-x0)/2), y=z0 } ) > nosmooth_rarity )--top middle
|
||||
and not (perlin1:get2d({x=x1, y=z1}) > nosmooth_rarity) --bottom right
|
||||
and not (perlin1:get2d({x=x1, y=z0+((z1-z0)/2)}) > nosmooth_rarity) --right middle
|
||||
and not (perlin1:get2d({x=x0, y=z1}) > nosmooth_rarity) --bottom left
|
||||
and not (perlin1:get2d({x=x1, y=z0}) > nosmooth_rarity) --top right
|
||||
and not (perlin1:get2d({x=x0+((x1-x0)/2), y=z1}) > nosmooth_rarity) --left middle
|
||||
and not (perlin1:get2d({x=(x1-x0)/2, y=(z1-z0)/2}) > nosmooth_rarity) --middle
|
||||
and not (perlin1:get2d({x=x0, y=z1+((z1-z0)/2)}) > nosmooth_rarity) then --bottom middle
|
||||
return
|
||||
end]]
|
||||
|
||||
local t1 = os.clock()
|
||||
riesenpilz.inform("tries to generate a giant mushroom biome at: x=["..minp.x.."; "..maxp.x.."]; y=["..minp.y.."; "..maxp.y.."]; z=["..minp.z.."; "..maxp.z.."]", 2)
|
||||
|
||||
|
@ -145,6 +139,9 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
local tab = {}
|
||||
pr = PseudoRandom(seed+68)
|
||||
|
||||
local heightmap = minetest.get_mapgen_object("heightmap")
|
||||
local hmi = 1
|
||||
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
data = vm:get_data()
|
||||
area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
||||
|
@ -158,14 +155,6 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
end
|
||||
end
|
||||
end
|
||||
--[[remove usual stuff
|
||||
local trees = env:find_nodes_in_area(minp, maxp, USUAL_STUFF)
|
||||
for i,v in pairs(trees) do
|
||||
env:remove_node(v)
|
||||
end]]
|
||||
|
||||
|
||||
local smooth = riesenpilz.smooth
|
||||
|
||||
for j=0,divs do
|
||||
for i=0,divs do
|
||||
|
@ -185,31 +174,43 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
) then
|
||||
in_biome = true
|
||||
end
|
||||
elseif (not smooth)
|
||||
and test > nosmooth_rarity then
|
||||
elseif test > nosmooth_rarity then
|
||||
in_biome = true
|
||||
end
|
||||
|
||||
if in_biome then
|
||||
|
||||
local ground_y = nil --Definition des Bodens:
|
||||
-- for y=maxp.y,0,-1 do
|
||||
for y=maxp.y,1,-1 do
|
||||
local p_pos = area:index(x, y, z)
|
||||
local d_p_pos = data[p_pos]
|
||||
for _,nam in pairs(c.USUAL_STUFF) do --remove usual stuff
|
||||
if d_p_pos == nam then
|
||||
data[p_pos] = c.air
|
||||
p_pos = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
if p_pos --else search ground_y
|
||||
and find_ground(d_p_pos, c.GROUND) then
|
||||
ground_y = y
|
||||
local ymin = math.max(heightmap[hmi]-5, minp.y) -- -1
|
||||
|
||||
-- skip the air part
|
||||
local ground
|
||||
for y = math.min(heightmap[hmi]+20, maxp.y),ymin,-1 do
|
||||
if data[area:index(x, y, z)] ~= c.air then
|
||||
ground = y
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local ground_y
|
||||
if ground then
|
||||
for y = ground,ymin,-1 do
|
||||
local p_pos = area:index(x, y, z)
|
||||
local d_p_pos = data[p_pos]
|
||||
for _,nam in pairs(c.USUAL_STUFF) do --remove usual stuff
|
||||
if d_p_pos == nam then
|
||||
data[p_pos] = c.air
|
||||
p_pos = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
if p_pos --else search ground_y
|
||||
and find_ground(d_p_pos, c.GROUND) then
|
||||
ground_y = y
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ground_y then
|
||||
data[area:index(x, ground_y, z)] = c.ground
|
||||
for i = -1,-5,-1 do
|
||||
|
@ -220,6 +221,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
break
|
||||
end
|
||||
end
|
||||
local bigtype
|
||||
local boden = {x=x,y=ground_y+1,z=z}
|
||||
if pr:next(1,15) == 1 then
|
||||
data[area:index(x, ground_y+1, z)] = c.dry_shrub
|
||||
|
@ -231,28 +233,32 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
riesenpilz_circle(c.riesenpilz_red, boden, pr:next(4,5), 3)
|
||||
elseif pr:next(1,100) == 1 then
|
||||
riesenpilz_circle(c.riesenpilz_fly_agaric, boden, 4, 3)
|
||||
elseif pr:next(1,340) == 10 then
|
||||
bigtype = 2
|
||||
elseif pr:next(1,380) == 1 then
|
||||
bigtype = 1
|
||||
elseif pr:next(1,390) == 20 then
|
||||
bigtype = 3
|
||||
elseif pr:next(1,800) == 7 then
|
||||
bigtype = 5
|
||||
elseif pr:next(1,4000) == 1 then
|
||||
riesenpilz_circle(c.riesenpilz_lavashroom, boden, pr:next(5,6), 3)
|
||||
elseif pr:next(1,5000) == 1 then
|
||||
riesenpilz_circle(c.riesenpilz_glowshroom, boden, 3, 3)
|
||||
elseif pr:next(1,380) == 1 then
|
||||
tab[num] = {1, boden}
|
||||
num = num+1
|
||||
elseif pr:next(1,340) == 10 then
|
||||
tab[num] = {2, boden}
|
||||
num = num+1
|
||||
elseif pr:next(1,390) == 20 then
|
||||
tab[num] = {3, boden}
|
||||
num = num+1
|
||||
elseif pr:next(1,6000) == 2 and pr:next(1,200) == 15 then
|
||||
tab[num] = {4, boden}
|
||||
num = num+1
|
||||
elseif pr:next(1,800) == 7 then
|
||||
tab[num] = {5, boden}
|
||||
elseif pr:next(1,6000) == 2 then
|
||||
if pr:next(1,200) == 15 then
|
||||
bigtype = 4
|
||||
elseif pr:next(1,2000) == 54 then
|
||||
bigtype = 6
|
||||
end
|
||||
end
|
||||
if bigtype then
|
||||
tab[num] = {bigtype, boden}
|
||||
num = num+1
|
||||
end
|
||||
end
|
||||
end
|
||||
hmi = hmi+1
|
||||
end
|
||||
end
|
||||
riesenpilz.inform("ground finished", 2, t1)
|
||||
|
@ -276,6 +282,8 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
riesenpilz.lavashroom(p, data, area)
|
||||
elseif m == 5 then
|
||||
riesenpilz.parasol(p, data, area)
|
||||
elseif m == 6 then
|
||||
riesenpilz.red45(p, data, area)
|
||||
end
|
||||
end
|
||||
riesenpilz.inform("giant shrooms generated", 2, t2)
|
||||
|
@ -289,49 +297,9 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
vm:set_lighting({day=0, night=0})
|
||||
vm:calc_lighting()
|
||||
vm:write_to_map()
|
||||
data = nil
|
||||
area = nil
|
||||
riesenpilz.inform("data set", 2, t2)
|
||||
|
||||
riesenpilz.inform("done", 1, t1)
|
||||
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("abortriesenpilz")
|
||||
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)]]
|
||||
|
|
Before Width: | Height: | Size: 150 B |
Before Width: | Height: | Size: 216 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 114 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 119 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 102 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 119 B |
Before Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 159 B |
Before Width: | Height: | Size: 151 B |
Before Width: | Height: | Size: 4.4 KiB |
|
@ -21,7 +21,10 @@ riesenpilz.smooth_trans_size = 2
|
|||
riesenpilz.info = true
|
||||
|
||||
--informs the players too
|
||||
riesenpilz.inform_all = minetest.is_singleplayer()
|
||||
riesenpilz.inform_all = false--minetest.is_singleplayer()
|
||||
|
||||
--1:<a bit of information> 2:<acceptable amount of information> 3:<lots of text>
|
||||
riesenpilz.max_spam = 2
|
||||
|
||||
--3d apple
|
||||
riesenpilz.change_apple = true
|
||||
|
|
BIN
mods/riesenpilz/textures/riesenpilz_brown_side.png
Executable file → Normal file
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 251 B |
BIN
mods/riesenpilz/textures/riesenpilz_brown_top.png
Executable file → Normal file
Before Width: | Height: | Size: 182 B After Width: | Height: | Size: 186 B |
BIN
mods/riesenpilz/textures/riesenpilz_red_top.png
Executable file → Normal file
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 263 B |
BIN
mods/riesenpilz/textures/riesenpilz_stem_red45.png
Normal file
After Width: | Height: | Size: 734 B |
BIN
mods/riesenpilz/textures/riesenpilz_stem_red45_top.png
Normal file
After Width: | Height: | Size: 734 B |