Initial commit

master
npx 2016-12-05 00:07:14 +01:00
commit d8329b07fb
10 changed files with 261 additions and 0 deletions

27
README.txt Normal file
View File

@ -0,0 +1,27 @@
Not So Simple Mobs by NPX team
Starting from version 3.0 the mod depends on mobs_redo api: https://github.com/tenplus1/mobs_redo
We suggest that you play nssm with:
- nssb (Not So Simple Buildings, our second mod that adds many blocks and Morlendor, the new dimension):
- 3d_armors (with which you can use nssm armors):
- unified_inventory (useful to discover all the new recipes and to use the armors):
- a throwing mod (a mod that add bows) if compatible with the Tenplus1's damage_system
We would like to thank:
- PilzAdam, for his wonderful simple-mobs mod;
- Tenplus1, for his hard work in making mobs_redo;
- Echoes91, for Spears: simple but amazing;
- and obviously Celeron-55 and all the people who contributed to Minetest and its community (and Paramat in particular);
- Denise and Ponzi_Duro for the revision of the guide;
- Double_P, Ponzi_Duro, Andrey01 and Taikedz for the beta testing;
- Taikedz for his support and for hosting a server dedicated to nssm (Not So Simple Server: https://forum.minetest.net/viewtopic.php?f=10&t=15435&hilit=nsss);
License for the code: LGPL
License for all the models, textures and sound: CC BY-SA 4.0
The mod makes the game really hard, please read the wiki before playing: http://wiki.minetest.net/Mods/Not_So_Simple_Mobs (which will be updated as soon as possible) or the old guide for the 2.4 version.
Here are the trailers of the mod:
- nssm 2.1: https://www.youtube.com/watch?v=ccLUt58mo0k
- nssm 3.0: https://www.youtube.com/watch?v=ZBuAi1sQJxQ

17
appunti Normal file
View File

@ -0,0 +1,17 @@
Per ogni bomba bisogna definire:
- nome
- descrizione
- def con:
Necessari:
-> textures (usata sia per l'inventario che per la bomba stessa)
-> ricetta / recipe_block (ricetta di default)
-> hit_node(self, pos) / explosion = {
shape = "cube",
radius = 2,
block = "default:ice",
particles = false,
},
Aggiuntivi:
-> velocity
-> recipe_number

165
bombs_api.lua Normal file
View File

@ -0,0 +1,165 @@
function nssbombs:register_throwitem(name, descr, def)
minetest.register_craftitem("nssbombs:"..name.."_bomb", {
description = descr,
inventory_image = def.textures,
on_use = function(itemstack, placer, pointed_thing)
local velocity = def.velocity or 15
local dir = placer:get_look_dir()
local playerpos = placer:getpos()
local obj = minetest.env:add_entity({x=playerpos.x+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+dir.z}, "nssbombs:"..name.."_bomb_flying")
local vec = {x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}
local acc = {x=0, y=-9.8, z=0}
obj:setvelocity(vec)
obj:setacceleration(acc)
itemstack:take_item()
return itemstack
end,
})
minetest.register_entity("nssbombs:"..name.."_bomb_flying",{
textures = {def.textures},
hp_max = 50,
collisionbox = {-0.1,-0.1,-0.1, 0.1,0.1,0.1},
visual_size = def.visual_size or {x=1, y=1},
explosion = def.explosion or {},
on_step = function(self, dtime)
local pos = self.object:getpos()
local node = minetest.get_node(pos)
local name = node.name
if name ~= "air" then
if def.hit_node then
def.hit_node(self, pos)
else
default_hit_node(self, self.explosion)
end
self.object:remove()
end
end,
})
if def.recipe_block then
recepy = {
{def.recipe_block, def.recipe_block, def.recipe_block},
{"tnt:gunpowder", "default:mese_crystal_fragment", "tnt:gunpowder"},
{def.recipe_block, def.recipe_block, def.recipe_block},
}
end
local number = def.recipe_number or 1
minetest.register_craft({
output = "nssbombs:"..name.."_bomb "..number,
recipe = def.recipe or recepy
})
end
function default_hit_node(self, explosion)
radius = explosion.radius
shape = explosion.shape
block = explosion.block
particles = explosion.particles
local p = self.object:getpos()
local center = {x=p.x, y=p.y+radius, z=p.z}
if particles then
add_effects(center, radius, block)
end
if shape == "cube" then
for dx = -radius,radius do
for dy = 0,2*radius do
for dz = -radius,radius do
local pos1 = {x = p.x+dx, y=p.y+dy, z=p.z+dz}
if not minetest.is_protected(pos1, "") or not minetest.get_item_group(minetest.get_node(pos1).name, "unbreakable") == 1 then
minetest.set_node(pos1, {name=block})
end
end
end
end
elseif shape == "sphere" then
for dx = -radius,radius do
for dy = 0,2*radius do
for dz = -radius,radius do
local pos1 = {x = p.x+dx, y=p.y+dy, z=p.z+dz}
if math.abs(vector.length(vector.subtract(pos1,center))) <= radius then
if not minetest.is_protected(pos1, "") or not minetest.get_item_group(minetest.get_node(pos1).name, "unbreakable") == 1 then
minetest.set_node(pos1, {name=block})
end
end
end
end
end
end
end
function add_effects(pos, radius, block)
minetest.add_particle({
pos = pos,
velocity = vector.new(),
acceleration = vector.new(),
expirationtime = 0.4,
size = radius * 10,
collisiondetection = false,
vertical = false,
texture = "tnt_boom.png",
})
minetest.add_particlespawner({
amount = 32,
time = 0.5,
minpos = vector.subtract(pos, radius / 2),
maxpos = vector.add(pos, radius / 2),
minvel = {x = -10, y = -10, z = -10},
maxvel = {x = 10, y = 10, z = 10},
minacc = vector.new(),
maxacc = vector.new(),
minexptime = 1,
maxexptime = 2.5,
minsize = radius * 3,
maxsize = radius * 5,
texture = "tnt_smoke.png",
})
local texture2 = "tnt_smoke.png"
local def = minetest.registered_nodes[block]
if def and def.tiles and def.tiles[1] and type(def.tiles[1])=="string" then
texture2 = def.tiles[1]
end
minetest.add_particlespawner({
amount = 32,
time = 0.5,
minpos = vector.subtract(pos, radius / 2),
maxpos = vector.add(pos, radius / 2),
minvel = {x = -10, y = -10, z = -10},
maxvel = {x = 10, y = 10, z = 10},
minacc = vector.new(),
maxacc = vector.new(),
minexptime = 1,
maxexptime = 2.5,
minsize = radius * 3,
maxsize = radius * 5,
texture = texture2,
})
local texture1 = "tnt_blast.png" --fallback texture
minetest.add_particlespawner({
amount = 32,
time = 0.1,
minpos = vector.subtract(pos, radius / 2),
maxpos = vector.add(pos, radius / 2),
minvel = {x = -3, y = 0, z = -3},
maxvel = {x = 3, y = 5, z = 3},
minacc = {x = 0, y = -10, z = 0},
maxacc = {x = 0, y = -10, z = 0},
minexptime = 0.8,
maxexptime = 2.0,
minsize = radius * 0.66,
maxsize = radius * 2,
texture = texture1,
collisiondetection = true,
})
end

43
bombs_examples.lua Normal file
View File

@ -0,0 +1,43 @@
--Ice bomb
nssbombs:register_throwitem("ice", "Ice Bomb", {
textures = "ice_bomb.png",
recipe_number = 8,
recipe_block = "default:ice",
explosion = {
shape = "sphere",
radius = 5,
block = "default:ice",
particles = true,
},
})
--Fire bomb
nssbombs:register_throwitem("fire", "Fire Bomb", {
textures = "fire_bomb.png",
recipe_block = "bucket:lava_bucket",
explosion = {
shape = "sphere",
radius = 4,
block = "fire:basic_flame",
particles = true,
},
})
--[[
hit_node = function(self,pos)
for dx = -1,1 do
for dy = 1,3 do
for dz = -1,1 do
local pos1 = {x = pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local pos2 = {x = pos.x, y=pos.y+1, z=pos.z}
local pos3 = {x = pos.x, y=pos.y+2, z=pos.z}
if not minetest.is_protected(pos1, "") or not minetest.get_item_group(minetest.get_node(pos1).name, "unbreakable") == 1 then
minetest.set_node(pos1, {name="default:ice"})
minetest.set_node(pos2, {name="air"})
minetest.set_node(pos3, {name="air"})
end
end
end
end
end,
]]

1
changelog.txt Normal file
View File

@ -0,0 +1 @@

1
depends.txt Normal file
View File

@ -0,0 +1 @@
tnt

6
init.lua Normal file
View File

@ -0,0 +1,6 @@
--Not So Simple Bombs
nssbombs = {}
local path = minetest.get_modpath("nssbombs")
dofile(path.."/bombs_api.lua")
dofile(path.."/bombs_examples.lua")

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = nssbombs

BIN
textures/fire_bomb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

BIN
textures/ice_bomb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B