diff --git a/darts.lua b/darts.lua index e9777ba..1e15455 100644 --- a/darts.lua +++ b/darts.lua @@ -186,6 +186,55 @@ function explosion_web(pos) end end + +-- thick_web arrow +mobs:register_arrow("nssm:thickwebball", { + visual = "sprite", + visual_size = {x = 2, y = 2}, + textures = {"thick_web_ball.png"}, + velocity = 8, + -- direct hit + hit_player = function(self, player) + local p = player:getpos() + explosion_web(p) + end, + + hit_mob = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 6}, + }, nil) + end, + + hit_node = function(self, pos, node) + explosion_web(pos) + end +}) + +function explosion_web(pos) + if minetest.is_protected(pos, "") then + return + end + pos.y = round(pos.y) + for i=pos.x+0, pos.x+0, 1 do + for j=pos.y-2, pos.y, 1 do + for k=pos.z+0, pos.z+0, 1 do + local p = {x=i,y=j,z=k} + local k = {x=i,y=j+1,z=k} + local current = minetest.env:get_node(p).name + local ontop = minetest.env:get_node(k).name + if (current ~= "air") and + (current ~= "nssm:thick_web") and + (ontop == "air") and not + minetest.is_protected(p,"") and not + minetest.is_protected(k,"") then + minetest.set_node(k, {name="nssm:thick_web"}) + end + end + end + end +end + -- arrow=>phoenix arrow mobs:register_arrow("nssm:phoenix_arrow", { visual = "sprite", diff --git a/mobs/ant_soldier.lua b/mobs/ant_soldier.lua index 42c32c4..7c21577 100644 --- a/mobs/ant_soldier.lua +++ b/mobs/ant_soldier.lua @@ -10,7 +10,7 @@ mobs:register_mob("nssm:ant_soldier", { makes_footstep_sound = true, view_range = 20, fear_height = 4, - walk_velocity = 1.5, + walk_velocity = 0.5, run_velocity = 3, rotate = 270, sounds = { diff --git a/mobs/ant_worker.lua b/mobs/ant_worker.lua index f6a6e07..0da7895 100644 --- a/mobs/ant_worker.lua +++ b/mobs/ant_worker.lua @@ -10,7 +10,7 @@ mobs:register_mob("nssm:ant_worker", { makes_footstep_sound = true, view_range = 20, fear_height = 4, - walk_velocity = 1.5, + walk_velocity = 0.5, run_velocity = 2, rotate = 270, sounds = { diff --git a/mobs/black_widow.lua b/mobs/black_widow.lua index 8a087ba..189a963 100644 --- a/mobs/black_widow.lua +++ b/mobs/black_widow.lua @@ -10,7 +10,7 @@ mobs:register_mob("nssm:black_widow", { makes_footstep_sound = true, view_range = 15, fear_height = 4, - walk_velocity = 1, + walk_velocity = 0.8, run_velocity = 2.5, rotate = 270, sounds = { diff --git a/mobs/bloco.lua b/mobs/bloco.lua index 8c63d12..04ee959 100644 --- a/mobs/bloco.lua +++ b/mobs/bloco.lua @@ -10,7 +10,7 @@ mobs:register_mob("nssm:bloco", { makes_footstep_sound = true, view_range = 8, fear_height = 4, - walk_velocity = 1, + walk_velocity = 0.6, run_velocity = 2.5, rotate = 270, sounds = { diff --git a/mobs/daddy_long_legs.lua b/mobs/daddy_long_legs.lua index 2cc3425..faf765a 100644 --- a/mobs/daddy_long_legs.lua +++ b/mobs/daddy_long_legs.lua @@ -9,14 +9,14 @@ mobs:register_mob("nssm:daddy_long_legs", { visual_size = {x=8, y=8}, makes_footstep_sound = true, view_range = 12, - walk_velocity = 1.5, + walk_velocity = 0.7, fear_height = 4, run_velocity = 3.3, rotate = 90, sounds = { random = "daddy", }, - damage = 4, + damage = 3, jump = true, drops = { {name = "nssm:life_energy", diff --git a/mobs/dolidrosaurus.lua b/mobs/dolidrosaurus.lua index 5b6c840..69f66ed 100644 --- a/mobs/dolidrosaurus.lua +++ b/mobs/dolidrosaurus.lua @@ -12,9 +12,9 @@ mobs:register_mob("nssm:dolidrosaurus", { fly = true, fly_in = "default:water_source", fall_speed = -20, - walk_velocity = 2, - run_velocity = 3, - damage = 6, + walk_velocity = 1.5, + run_velocity = 3.3, + damage = 5, rotate = 270, jump = false, jump_chance = 0, diff --git a/mobs/duck.lua b/mobs/duck.lua index ce4c493..d3a79e6 100644 --- a/mobs/duck.lua +++ b/mobs/duck.lua @@ -1,6 +1,6 @@ mobs:register_mob("nssm:duck", { type = "monster", - hp_max = 16, + hp_max = 12, hp_min = 7, collisionbox = {-0.3, 0.00, -0.3, 0.3, 0.95, 0.3}, visual = "mesh", diff --git a/mobs/flying_duck.lua b/mobs/flying_duck.lua index 9a5e09b..a110c1e 100644 --- a/mobs/flying_duck.lua +++ b/mobs/flying_duck.lua @@ -1,7 +1,7 @@ mobs:register_mob("nssm:flying_duck", { type = "monster", - hp_max = 25, - hp_min = 14, + hp_max = 20, + hp_min = 10, collisionbox = {-0.3, -0.2, -0.3, 0.3, 0.2, 0.3}, visual = "mesh", mesh = "nathan_petrelli.x", @@ -15,7 +15,7 @@ mobs:register_mob("nssm:flying_duck", { sounds = { random = "duck", }, - damage = 4, + damage = 3, reach = 2, jump = true, drops = { diff --git a/mobs/icesnake.lua b/mobs/icesnake.lua index 6bce9d7..0407980 100644 --- a/mobs/icesnake.lua +++ b/mobs/icesnake.lua @@ -16,7 +16,7 @@ mobs:register_mob("nssm:icesnake", { sounds = { random = "icesnake", }, - damage = 5, + damage = 4, reach = 2, jump = true, drops = { diff --git a/mobs/morgre.lua b/mobs/morgre.lua index 38f09fc..64ca845 100644 --- a/mobs/morgre.lua +++ b/mobs/morgre.lua @@ -30,7 +30,7 @@ mobs:register_mob("nssm:morgre", { min = 1, max = 1,}, }, - armor = 70, + armor = 60, drawtype = "front", water_damage = 0, lava_damage = 0, diff --git a/mobs/pumpboom.lua b/mobs/pumpboom.lua index 3eed731..fe82d1c 100644 --- a/mobs/pumpboom.lua +++ b/mobs/pumpboom.lua @@ -23,7 +23,11 @@ mobs:register_mob("nssm:pumpboom_small", { {name = "nssm:life_energy", chance = 1, min = 1, - max = 2,} + max = 2,}, + {name = "nssm:black_powder", + chance = 2, + min = 1, + max = 2,}, }, armor = 100, drawtype = "front", @@ -70,7 +74,11 @@ mobs:register_mob("nssm:pumpboom_medium", { {name = "nssm:life_energy", chance = 1, min = 2, - max = 3,} + max = 3,}, + {name = "nssm:black_powder", + chance = 2, + min = 1, + max = 3,}, }, armor = 100, drawtype = "front", @@ -117,7 +125,11 @@ mobs:register_mob("nssm:pumpboom_large", { {name = "nssm:life_energy", chance = 1, min = 3, - max = 4,} + max = 4,}, + {name = "nssm:black_powder", + chance = 2, + min = 2, + max = 4,}, }, armor = 100, drawtype = "front", diff --git a/mobs/pumpking.lua b/mobs/pumpking.lua index 8aeed1a..2fdd4bc 100644 --- a/mobs/pumpking.lua +++ b/mobs/pumpking.lua @@ -29,6 +29,10 @@ mobs:register_mob("nssm:pumpking", { chance = 1, min = 1, max = 1,}, + {name = "nssm:black_powder", + chance = 1, + min = 9, + max = 12,}, }, armor =40, drawtype = "front", diff --git a/mobs/snow_biter.lua b/mobs/snow_biter.lua index d75aa7c..e1e61f3 100644 --- a/mobs/snow_biter.lua +++ b/mobs/snow_biter.lua @@ -19,7 +19,7 @@ mobs:register_mob("nssm:snow_biter", { random = "snow_biter", }, --pathfinding = true, - damage = 6, + damage = 4, jump = true, drops = { {name = "nssm:life_energy", diff --git a/mobs/swimming_duck.lua b/mobs/swimming_duck.lua index 5a519bf..61d9ee5 100644 --- a/mobs/swimming_duck.lua +++ b/mobs/swimming_duck.lua @@ -7,7 +7,7 @@ mobs:register_mob("nssm:swimming_duck", { mesh = "swimming_duck.x", textures = {{"swimming_duck.png"}}, visual_size = {x=2, y=2}, - view_range = 15, + view_range = 25, floats=1, walk_velocity = 1, run_velocity = 1, diff --git a/mobs/tarantula.lua b/mobs/tarantula.lua index 9f28a56..b17dfe4 100644 --- a/mobs/tarantula.lua +++ b/mobs/tarantula.lua @@ -10,7 +10,7 @@ mobs:register_mob("nssm:tarantula", { makes_footstep_sound = true, view_range = 20, lifetimer = 500, - walk_velocity = 1.5, + walk_velocity = 0.7, fear_height = 4, run_velocity = 3, rotate = 270, @@ -19,6 +19,12 @@ mobs:register_mob("nssm:tarantula", { }, damage = 8, jump = true, + drops = { + {name = "nssm:super_silk_gland", + chance = 1, + min = 3, + max = 5,}, + }, armor = 60, drawtype = "front", water_damage = 1, @@ -26,7 +32,11 @@ mobs:register_mob("nssm:tarantula", { reach = 3, light_damage = 0, on_rightclick = nil, - attack_type = "dogfight", + dogshoot_switch = true, + attack_type = "dogshoot", + arrow = "nssm:thickwebball", + shoot_interval = 2, + shoot_offset = 1, animation = { speed_normal = 20, speed_run = 25, @@ -38,6 +48,8 @@ mobs:register_mob("nssm:tarantula", { run_end = 160, punch_start = 180, punch_end = 200, + shoot_start = 180, + shoot_end = 200, }, on_die = function(self, pos) self.object:remove() diff --git a/nssm_materials.lua b/nssm_materials.lua index 3366c7e..e5d4f42 100644 --- a/nssm_materials.lua +++ b/nssm_materials.lua @@ -126,6 +126,8 @@ nssm_register_eatcraftitems ('spider_meat','Spider Meat',-1) nssm_register_eatcraftitems ('roasted_spider_meat','Roasted Spider Meat',3) nssm_register_eatcraftitems ('silk_gland','Silk Gland',-1) nssm_register_eatcraftitems ('roasted_silk_gland','Roasted Silk Gland',3) +nssm_register_eatcraftitems ('super_silk_gland','Super Silk Gland',-8) +nssm_register_eatcraftitems ('roasted_super_silk_gland','Roasted Super Silk Gland',2) --ore generation @@ -302,7 +304,7 @@ minetest.register_node("nssm:thick_web", { diggable = true, buildable_to = false, drop = "", - drowning = 0, + drowning = 2, liquid_renewable = false, liquidtype = "source", liquid_range= 0, diff --git a/nssm_weapons.lua b/nssm_weapons.lua index e8a46dd..b29854d 100644 --- a/nssm_weapons.lua +++ b/nssm_weapons.lua @@ -639,6 +639,7 @@ function nssm_register_throwitem(name, descr, def) local velocity = 15 local dir = placer:get_look_dir(); local playerpos = placer:getpos(); + posthrow = playerpos local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "nssm:"..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} @@ -863,6 +864,31 @@ minetest.register_craft({ } }) +nssm_register_throwitem("food", "Food Bomb", { + hit_node = function(self,pos) + for dx = -1,1 do + for dy = -1,1 do + for dz = -1,1 do + local pos1 = {x = pos.x+dx, y=pos.y+dy, z=pos.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="air"}) + minetest.add_item(pos1, "nssm:roasted_duck_legs") + end + end + end + end + end, +}) + +minetest.register_craft({ + output = 'nssm:food_bomb 3', + recipe = { + {'nssm:gluttonous_soul_fragment', 'nssm:black_powder', 'nssm:gluttonous_soul_fragment'}, + {'nssm:black_powder', 'nssm:gluttonous_soul_fragment', 'nssm:black_powder'}, + {'nssm:gluttonous_soul_fragment', 'nssm:black_powder', 'nssm:gluttonous_soul_fragment'}, + } +}) + nssm_register_throwitem("phoenix_fire", "Phoenix Fire Bomb", { hit_node = function(self,pos) for dx = -2,2 do @@ -905,6 +931,31 @@ minetest.register_craft({ } }) +nssm_register_throwitem("teleport", "Teleport Bomb", { + hit_node = function(self,pos,placer) + local pos1 = {x = pos.x, y=pos.y+1, z=pos.z} + local pos2 = {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 + for _,obj in ipairs(minetest.get_objects_inside_radius(posthrow, 2)) do + if obj:is_player() then + obj:setpos(pos1) + minetest.set_node(pos1, {name="air"}) + minetest.set_node(pos2, {name="air"}) + end + end + end + end, +}) + +minetest.register_craft({ + output = 'nssm:teleport_bomb 2', + recipe = { + {'nssm:slothful_soul_fragment', 'nssm:black_powder', 'nssm:slothful_soul_fragment'}, + {'nssm:black_powder', 'nssm:slothful_soul_fragment', 'nssm:black_powder'}, + {'nssm:slothful_soul_fragment', 'nssm:black_powder', 'nssm:slothful_soul_fragment'}, + } +}) + nssm_register_throwitem("boom", "Boom Bomb", { hit_node = function(self,pos) local pos1 = {x = pos.x, y=pos.y, z=pos.z} @@ -923,6 +974,57 @@ minetest.register_craft({ } }) +nssm_register_throwitem("smoke", "Smoke Bomb", { + hit_node = function(self,pos) + local pos1 = {x = pos.x, y=pos.y, z=pos.z} + minetest.add_particlespawner({ + amount = 6000, + time = 20, + minpos = {x=pos1.x-3, y=pos1.y+0.5, z=pos1.z-3}, + maxpos = {x=pos1.x+3, y=pos1.y+0.5, z=pos1.z+3}, + minvel = {x=0.2, y=0.2, z=0.2}, + maxvel = {x=0.4, y=0.8, z=0.4}, + minacc = {x=-0.2,y=0,z=-0.2}, + maxacc = {x=0.2,y=0.1,z=0.2}, + minexptime = 6, + maxexptime = 8, + minsize = 10, + maxsize = 12, + collisiondetection = false, + vertical = false, + texture = "tnt_smoke.png",}) + end, +}) + +minetest.register_craft({ + output = 'nssm:smoke_bomb 2', + recipe = { + {'nssm:proud_soul_fragment', 'nssm:black_powder', 'nssm:proud_soul_fragment'}, + {'nssm:black_powder', 'nssm:proud_soul_fragment', 'nssm:black_powder'}, + {'nssm:proud_soul_fragment', 'nssm:black_powder', 'nssm:proud_soul_fragment'}, + } +}) + +nssm_register_throwitem("thick_web", "Thick Web Bomb", { + hit_node = function(self,pos) + local pos1 = {x = pos.x, y=pos.y+1, z=pos.z} + local pos2 = {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="nssm:thick_web"}) + minetest.set_node(pos2, {name="nssm:thick_web"}) + end + end, +}) + +minetest.register_craft({ + output = 'nssm:thick_web_bomb 12', + recipe = { + {'nssm:super_silk_gland', 'nssm:black_powder', 'nssm:super_silk_gland'}, + {'nssm:black_powder', 'nssm:black_powder', 'nssm:black_powder'}, + {'nssm:super_silk_gland', 'nssm:black_powder', 'nssm:super_silk_gland'}, + } +}) + nssm_register_throwitem("poison", "Poison Bomb", { hit_node = function(self,pos) for dx = -1,1 do @@ -947,6 +1049,30 @@ minetest.register_craft({ } }) +nssm_register_throwitem("stone", "Cobblestone Bomb", { + 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} + 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:cobble"}) + end + end + end + end + end, +}) + +minetest.register_craft({ + output = 'nssm:stone_bomb 2', + recipe = { + {'default:stone', 'nssm:black_powder', 'default:stone'}, + {'nssm:black_powder', 'nssm:black_powder', 'nssm:black_powder'}, + {'default:stone', 'nssm:black_powder', 'default:stone'}, + } +}) + nssm_register_throwitem("fire_ring", "Fire Ring Bomb", { hit_node = function(self,pos) for dx = -2,2 do diff --git a/textures/food_bomb.png b/textures/food_bomb.png new file mode 100644 index 0000000..7594041 Binary files /dev/null and b/textures/food_bomb.png differ diff --git a/textures/roasted_super_silk_gland.png b/textures/roasted_super_silk_gland.png new file mode 100644 index 0000000..cb0d80c Binary files /dev/null and b/textures/roasted_super_silk_gland.png differ diff --git a/textures/smoke_bomb.png b/textures/smoke_bomb.png new file mode 100644 index 0000000..517e476 Binary files /dev/null and b/textures/smoke_bomb.png differ diff --git a/textures/stone_bomb.png b/textures/stone_bomb.png new file mode 100644 index 0000000..8740a5a Binary files /dev/null and b/textures/stone_bomb.png differ diff --git a/textures/super_silk_gland.png b/textures/super_silk_gland.png new file mode 100644 index 0000000..e3610f1 Binary files /dev/null and b/textures/super_silk_gland.png differ diff --git a/textures/teleport_bomb.png b/textures/teleport_bomb.png new file mode 100644 index 0000000..1708167 Binary files /dev/null and b/textures/teleport_bomb.png differ diff --git a/textures/thick_web_ball.png b/textures/thick_web_ball.png new file mode 100644 index 0000000..b4a34c0 Binary files /dev/null and b/textures/thick_web_ball.png differ diff --git a/textures/thick_web_bomb.png b/textures/thick_web_bomb.png new file mode 100644 index 0000000..f536ece Binary files /dev/null and b/textures/thick_web_bomb.png differ