forked from mtcontrib/minetest-mod-sea
initial commit
This commit is contained in:
1
clams/depends.txt
Normal file
1
clams/depends.txt
Normal file
@ -0,0 +1 @@
|
||||
default
|
392
clams/init.lua
Normal file
392
clams/init.lua
Normal file
@ -0,0 +1,392 @@
|
||||
-- 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})
|
||||
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,
|
||||
height_max = -4,
|
||||
height_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,
|
||||
height_max = -4,
|
||||
height_min = -60,
|
||||
})
|
||||
|
||||
|
||||
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, chunk_size, ore_per_chunk, height_min, height_max)
|
||||
if maxp.y < height_min or minp.y > height_max then
|
||||
return
|
||||
end
|
||||
local y_min = math.max(minp.y, height_min)
|
||||
local y_max = math.min(maxp.y, height_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 >= height_min and y0 <= height_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")
|
29
clams/readme.txt
Normal file
29
clams/readme.txt
Normal file
@ -0,0 +1,29 @@
|
||||
Sounds:
|
||||
sounds = default.node_sound_sand_defaults(), default.node_sound_dirt_defaults(),
|
||||
|
||||
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
|
||||
.png's:
|
||||
default_sand.png
|
||||
VanessaE (WTFPL)
|
||||
|
||||
default_water_source_animated.png
|
||||
default_water_flowing_animated.png
|
||||
RealBadAngel's animated water (WTFPL)
|
||||
|
||||
default_dirt.png
|
||||
Cisoun's WTFPL texture pack
|
||||
|
||||
|
||||
Code:
|
||||
minetest/games/minetest_game/mods/default/mapgen.lua --> ore generation
|
||||
minetest/games/minetest_game/mods/default/nodes.lua --> water
|
||||
|
||||
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
BIN
clams/textures/clams_algae.png
Normal file
BIN
clams/textures/clams_algae.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
BIN
clams/textures/clams_algaeused.png
Normal file
BIN
clams/textures/clams_algaeused.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 997 B |
BIN
clams/textures/clams_collectedalgae.png
Normal file
BIN
clams/textures/clams_collectedalgae.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
clams/textures/clams_crushedwhite.png
Normal file
BIN
clams/textures/clams_crushedwhite.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 989 B |
BIN
clams/textures/clams_whiteshell.png
Normal file
BIN
clams/textures/clams_whiteshell.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Reference in New Issue
Block a user