forked from mtcontrib/minetest-mod-sea
393 lines
12 KiB
Lua
393 lines
12 KiB
Lua
-- NODES
|
|
|
|
minetest.register_node("clams:sandalgae", {
|
|
description = "Sandalgae",
|
|
tiles = {"default_sand.png^clams_algae.png"},
|
|
paramtype = "light",
|
|
is_ground_content = true,
|
|
groups = {crumbly=3, falling_node=1, sand=1},
|
|
drop = {
|
|
items = {
|
|
{
|
|
items = {"clams:collectedalgae 4"},
|
|
},
|
|
{
|
|
items = {'clams:sandalgaeused'},
|
|
}
|
|
}
|
|
},
|
|
sounds = default.node_sound_sand_defaults(),
|
|
})
|
|
|
|
minetest.register_node("clams:dirtalgae", {
|
|
description = "Dirtalgae",
|
|
tiles = {"default_dirt.png^clams_algae.png"},
|
|
paramtype = "light",
|
|
is_ground_content = true,
|
|
groups = {crumbly=3},
|
|
drop = {
|
|
items = {
|
|
{
|
|
items = {"clams:collectedalgae 4"},
|
|
},
|
|
{
|
|
items = {'clams:dirtalgaeused'},
|
|
}
|
|
}
|
|
},
|
|
sounds = default.node_sound_dirt_defaults,
|
|
})
|
|
|
|
minetest.register_node("clams:sandalgaeused", {
|
|
description = "Used sandalgae",
|
|
tiles = {"default_sand.png^clams_algaeused.png"},
|
|
inventory_image = {"default_sand.png^clams_algaeused.png"},
|
|
is_ground_content = true,
|
|
groups = {crumbly=3, falling_node=1, sand=1},
|
|
sounds = default.node_sound_sand_defaults(),
|
|
})
|
|
|
|
minetest.register_node("clams:dirtalgaeused", {
|
|
description = "Used dirtalgae",
|
|
tiles = {"default_dirt.png^clams_algaeused.png"},
|
|
inventory_image = {"default_dirt.png^clams_algaeused.png"},
|
|
is_ground_content = true,
|
|
groups = {crumbly=3},
|
|
sounds = default.node_sound_dirt_defaults(),
|
|
})
|
|
|
|
|
|
-- ENTITIES
|
|
|
|
|
|
-- The registration of the entities' code is copied from celeron55's mob (the DM's fireball)
|
|
|
|
|
|
minetest.register_entity("clams:whiteshell", {
|
|
description="White shell",
|
|
hp_max = 15,
|
|
physical = true,
|
|
collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2},
|
|
visual = "sprite",
|
|
visual_size = {x=0.5, y=0.5},
|
|
textures = {"clams_whiteshell.png^[makealpha:128,128,0"},
|
|
spritediv = {x=1, y=3},
|
|
initial_sprite_basepos = {x=0, y=0},
|
|
drops = {
|
|
{name = "clams:crushedwhite", chance = 1, min = 1, max = 4},
|
|
},
|
|
|
|
phase = 0,
|
|
phasetimer = 0,
|
|
|
|
-- on_activate = function(self, staticdata)
|
|
-- minetest.log("whiteshell activated!")
|
|
-- end,
|
|
|
|
on_step = function(self, dtime)
|
|
self.phasetimer = self.phasetimer + dtime
|
|
if self.phasetimer > 2.0 then
|
|
self.phasetimer = self.phasetimer - 2.0
|
|
self.phase = self.phase + 1
|
|
if self.phase >= 3 then
|
|
self.phase = 0
|
|
end
|
|
self.object:setsprite({x=0, y=self.phase})
|
|
local phasearmor = {
|
|
[0]={fleshy=0},
|
|
[1]={fleshy=30},
|
|
[2]={fleshy=70}
|
|
}
|
|
self.object:set_armor_groups(phasearmor[self.phase])
|
|
end
|
|
end,
|
|
|
|
on_punch = function(self, hitter)
|
|
if self.object:get_hp() <= 0 then
|
|
if hitter and hitter:is_player() and hitter:get_inventory() then
|
|
for _,drop in ipairs(self.drops) do
|
|
if math.random(1, drop.chance) == 1 then
|
|
hitter:get_inventory():add_item("main", ItemStack(drop.name.." "..math.random(drop.min, drop.max)))
|
|
end
|
|
end
|
|
else
|
|
for _,drop in ipairs(self.drops) do
|
|
if math.random(1, drop.chance) == 1 then
|
|
for i=1,math.random(drop.min, drop.max) do
|
|
local obj = minetest.add_item(self.object:getpos(), drop.name)
|
|
if obj then
|
|
obj:get_luaentity().collect = true
|
|
local x = math.random(1, 5)
|
|
if math.random(1,2) == 1 then
|
|
x = -x
|
|
end
|
|
local z = math.random(1, 5)
|
|
if math.random(1,2) == 1 then
|
|
z = -z
|
|
end
|
|
obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
-- CRAFT ITEMS
|
|
|
|
|
|
minetest.register_craftitem("clams:collectedalgae", {
|
|
description = "Collected algae",
|
|
inventory_image = "clams_collectedalgae.png",
|
|
})
|
|
|
|
minetest.register_craftitem("clams:crushedwhite", {
|
|
description = "Crushed white shell",
|
|
inventory_image = "clams_crushedwhite.png",
|
|
})
|
|
|
|
|
|
-- ALGAE GENERATION
|
|
|
|
|
|
minetest.register_ore({
|
|
ore_type = "scatter",
|
|
ore = "clams:sandalgae",
|
|
wherein = "default:sand",
|
|
clust_scarcity = 9*9*9,
|
|
clust_num_ores = 16,
|
|
clust_size = 4,
|
|
y_max = -4,
|
|
y_min = -60,
|
|
})
|
|
|
|
minetest.register_ore({
|
|
ore_type = "scatter",
|
|
ore = "clams:dirtalgae",
|
|
wherein = "default:dirt",
|
|
clust_scarcity = 9*9*9,
|
|
clust_num_ores = 16,
|
|
clust_size = 4,
|
|
y_max = -4,
|
|
y_min = -60,
|
|
})
|
|
|
|
|
|
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, y_min, y_max)
|
|
if maxp.y < y_min or minp.y > y_max then
|
|
return
|
|
end
|
|
local y_min = math.max(minp.y, y_min)
|
|
local y_max = math.min(maxp.y, y_max)
|
|
if chunk_size >= y_max - y_min + 1 then
|
|
return
|
|
end
|
|
local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
|
|
local pr = PseudoRandom(seed)
|
|
local num_chunks = math.floor(chunks_per_volume * volume)
|
|
local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
|
|
for i=1,num_chunks do
|
|
local y0 = pr:next(y_min, y_max-chunk_size+1)
|
|
if y0 >= y_min and y0 <= y_max then
|
|
local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
|
|
local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
|
|
local p0 = {x=x0, y=y0, z=z0}
|
|
for x1=0,chunk_size-1 do
|
|
for y1=0,chunk_size-1 do
|
|
for z1=0,chunk_size-1 do
|
|
if pr:next(1,inverse_chance) == 1 then
|
|
local x2 = x0+x1
|
|
local y2 = y0+y1
|
|
local z2 = z0+z1
|
|
local p2 = {x=x2, y=y2, z=z2}
|
|
if minetest.get_node(p2).name == wherein then
|
|
minetest.set_node(p2, {name=name})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--ABM's
|
|
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"clams:sandalgaeused"},
|
|
interval = 30,
|
|
chance = 20,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local y = {x = pos.x, y = pos.y + 1, z = pos.z }
|
|
local yy = {x = pos.x, y = pos.y + 2, z = pos.z }
|
|
if minetest.get_node(y).name == "default:water_source" or
|
|
minetest.get_node(y).name == "noairblocks:water_sourcex" then
|
|
if minetest.get_node(yy).name == "default:water_source" or
|
|
minetest.get_node(yy).name == "noairblocks:water_sourcex" then
|
|
minetest.add_node(pos, {name = "clams:sandalgae"}) else
|
|
return
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"clams:dirtalgaeused"},
|
|
interval = 30,
|
|
chance = 20,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local y = {x = pos.x, y = pos.y + 1, z = pos.z }
|
|
local yy = {x = pos.x, y = pos.y + 2, z = pos.z }
|
|
if minetest.get_node(y).name == "default:water_source" or
|
|
minetest.get_node(y).name == "noairblocks:water_sourcex" then
|
|
if minetest.get_node(yy).name == "default:water_source" or
|
|
minetest.get_node(yy).name == "noairblocks:water_sourcex" then
|
|
minetest.add_node(pos, {name = "clams:dirtalgae"}) else
|
|
return
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"clams:sandalgae"},
|
|
interval = 40,
|
|
chance = 40,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local y = {x = pos.x, y = pos.y + 1, z = pos.z }
|
|
local yy = {x = pos.x, y = pos.y + 2, z = pos.z }
|
|
if (active_object_count_wider + active_object_count_wider) > 40 then
|
|
return
|
|
elseif (minetest.get_node(y).name == "default:water_source" or
|
|
minetest.get_node(y).name == "noairblocks:water_sourcex") then
|
|
if (minetest.get_node(yy).name == "default:water_source" or
|
|
minetest.get_node(yy).name == "noairblocks:water_sourcex") then
|
|
pos.y=pos.y + 1
|
|
minetest.add_entity(pos, "clams:whiteshell")
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"clams:dirtalgae"},
|
|
interval = 40,
|
|
chance = 40,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local y = {x = pos.x, y = pos.y + 1, z = pos.z }
|
|
local yy = {x = pos.x, y = pos.y + 2, z = pos.z }
|
|
if (active_object_count_wider + active_object_count_wider) > 40 then
|
|
return
|
|
elseif (minetest.get_node(y).name == "default:water_source" or
|
|
minetest.get_node(y).name == "noairblocks:water_sourcex") then
|
|
if (minetest.get_node(yy).name == "default:water_source" or
|
|
minetest.get_node(yy).name == "noairblocks:water_sourcex") then
|
|
pos.y=pos.y + 1
|
|
minetest.add_entity(pos, "clams:whiteshell")
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
-- ALIASES
|
|
|
|
|
|
minetest.register_alias("clams:yellowalgae","clams:collectedalgae")
|
|
minetest.register_alias("clams:redalgae","clams:collectedalgae")
|
|
minetest.register_alias("clams:bluealgae","clams:collectedalgae")
|
|
|
|
minetest.register_alias("clams:yellowshell","clams:whiteshell")
|
|
minetest.register_alias("clams:redshell","clams:whiteshell")
|
|
minetest.register_alias("clams:blueshell","clams:whiteshell")
|
|
|
|
minetest.register_alias("clams:yellowseedsanddirt","clams:sandalgae")
|
|
minetest.register_alias("clams:redseedsanddirt","clams:dirtalgae")
|
|
minetest.register_alias("clams:blueseedsanddirt","clams:sandalgae")
|
|
|
|
minetest.register_alias("clams:yellowseed","clams:collectedalgae")
|
|
minetest.register_alias("clams:redseed","clams:collectedalgae")
|
|
minetest.register_alias("clams:blueseed","clams:collectedalgae")
|
|
|
|
minetest.register_alias("clams:sanddirt","clams:sandalgaeused")
|
|
minetest.register_alias("clams:sanddirtalgae","clams:dirtalgae")
|
|
minetest.register_alias("clams:sanddirtused","clams:dirtalgaeused")
|
|
|
|
minetest.register_alias("clams:sandbalgae","clams:sandalgae")
|
|
minetest.register_alias("clams:dirtbalgae","clams:dirtalgae")
|
|
|
|
minetest.register_alias("clams:crushedyellow","clams:crushedwhite")
|
|
minetest.register_alias("clams:crushedred","clams:crushedwhite")
|
|
minetest.register_alias("clams:crushedblue","clams:crushedwhite")
|
|
minetest.register_alias("clams:crushedblack","clams:crushedwhite")
|
|
|
|
minetest.register_alias("clams:emptybleacher","colormachine:colormachine")
|
|
minetest.register_alias("clams:filledbleacher","colormachine:colormachine")
|
|
minetest.register_alias("clams:readybleacher","colormachine:colormachine")
|
|
|
|
if( minetest.get_modpath( "colormachine") ~= nil ) then
|
|
minetest.register_alias("clams:emptybleacher","colormachine:colormachine")
|
|
minetest.register_alias("clams:filledbleacher","colormachine:colormachine")
|
|
minetest.register_alias("clams:readybleacher","colormachine:colormachine") else
|
|
minetest.register_alias("clams:emptybleacher","default:mese")
|
|
minetest.register_alias("clams:filledbleacher","default:mese")
|
|
minetest.register_alias("clams:readybleacher","default:mese")
|
|
return
|
|
end
|
|
|
|
|
|
-- ALIASES OLDEST VERSION
|
|
|
|
|
|
minetest.register_alias("algae:yellowalgae","clams:collectedalgae")
|
|
minetest.register_alias("algae:redalgae","clams:collectedalgae")
|
|
minetest.register_alias("algae:bluealgae","clams:collectedalgae")
|
|
|
|
minetest.register_alias("algae:sandalgae","clams:sandalgae")
|
|
minetest.register_alias("algae:dirtalgae","clams:dirtalgae")
|
|
minetest.register_alias("algae:sandbalgae","clams:sandalgae")
|
|
minetest.register_alias("algae:dirtbalgae","clams:dirtalgae")
|
|
|
|
minetest.register_alias("sea_cult:emptybleacher","colormachine:colormachine")
|
|
minetest.register_alias("sea_cult:filledbleacher","colormachine:colormachine")
|
|
minetest.register_alias("sea_cult:readybleacher","colormachine:colormachine")
|
|
|
|
if( minetest.get_modpath( "colormachine") ~= nil ) then
|
|
minetest.register_alias("sea_cult:emptybleacher","colormachine:colormachine")
|
|
minetest.register_alias("sea_cult:filledbleacher","colormachine:colormachine")
|
|
minetest.register_alias("sea_cult:readybleacher","colormachine:colormachine") else
|
|
minetest.register_alias("sea_cult:emptybleacher","default:mese")
|
|
minetest.register_alias("sea_cult:filledbleacher","default:mese")
|
|
minetest.register_alias("sea_cult:readybleacher","default:mese")
|
|
return
|
|
end
|
|
|
|
minetest.register_alias("sea_cult:sanddirt","clams:sandalgaeused")
|
|
minetest.register_alias("sea_cult:sanddirtalgae","clams:dirtalgae")
|
|
minetest.register_alias("sea_cult:sanddirtused","clams:dirtalgaeused")
|
|
|
|
minetest.register_alias("shells:yellowshell","clams:whiteshell")
|
|
minetest.register_alias("shells:redshell","clams:whiteshell")
|
|
minetest.register_alias("shells:blueshell","clams:whiteshell")
|
|
|
|
minetest.register_alias("shells:yellowseed","clams:collectedalgae")
|
|
minetest.register_alias("shells:redseed","clams:collectedalgae")
|
|
minetest.register_alias("shells:blueseed","clams:collectedalgae")
|
|
|
|
minetest.register_alias("shells:crushedyellow","clams:crushedwhite")
|
|
minetest.register_alias("shells:crushedred","clams:crushedwhite")
|
|
minetest.register_alias("shells:crushedblue","clams:crushedwhite")
|
|
minetest.register_alias("shells:crushedblack","clams:crushedwhite")
|
|
minetest.register_alias("shells:crushedwhite","clams:crushedwhite")
|
|
|
|
minetest.register_alias("shells_dye:yellowlightglass","clams:yellowlightglass")
|
|
minetest.register_alias("shells_dye:redlightglass","clams:redlightglass")
|
|
minetest.register_alias("shells_dye:bluelightglass","clams:bluelightglass")
|
|
minetest.register_alias("shells_dye:whitelightglass","clams:whitelightglass")
|
|
minetest.register_alias("shells_dye:blacklightglass","clams:blacklightglass")
|