From 8a13f7d7e7bd813ab3ece25d068f445583f4bcd7 Mon Sep 17 00:00:00 2001 From: npx Date: Thu, 23 Mar 2017 00:55:40 +0100 Subject: [PATCH] Finally back to work! --- darts.lua | 22 ++++++++++++ init.lua | 1 + mobs/black_scorpion.lua | 2 +- mobs/phoenix.lua | 70 ++++++++++++++++++++++++++++++++++--- mobs/pumpboom.lua | 12 +++---- mobs/salamander.lua | 77 +++++++++++++++++++++++++++++++++++++++++ nssm_materials.lua | 13 +++++-- todo.txt | 11 ++---- 8 files changed, 186 insertions(+), 22 deletions(-) create mode 100644 mobs/salamander.lua diff --git a/darts.lua b/darts.lua index 5268aef..139ac37 100644 --- a/darts.lua +++ b/darts.lua @@ -377,6 +377,28 @@ mobs:register_arrow("nssm:pumpkid_bomb", { end }) +--Lava_block bomb + +mobs:register_arrow("nssm:lava_block_bomb", { + visual = "cube", + visual_size = {x = 1, y = 1}, + textures = {"default_lava.png","default_lava.png", "default_lava.png", "default_lava.png", "default_lava.png", "default_lava.png"}, + velocity = 8, + -- direct hit + hit_player = function(self, player) + local p = player:getpos() + if not minetest.is_protected(p, "") or not minetest.get_item_group(minetest.get_node(p).name, "unbreakable") == 1 then + minetest.set_node(p, {name="default:lava_source"}) + end + end, + + hit_node = function(self, pos, node) + if not minetest.is_protected(pos, "") or not minetest.get_item_group(minetest.get_node(pos).name, "unbreakable") == 1 then + minetest.set_node(pos, {name="default:lava_source"}) + end + end +}) + -- mobs:register_arrow("nssm:roar_of_the_dragon", { visual = "sprite", diff --git a/init.lua b/init.lua index 686a4ad..ae82450 100644 --- a/init.lua +++ b/init.lua @@ -67,6 +67,7 @@ dofile(path.."/mobs/tartacacia.lua") dofile(path.."/mobs/uloboros.lua") dofile(path.."/mobs/werewolf.lua") dofile(path.."/mobs/white_werewolf.lua") +dofile(path.."/mobs/salamander.lua") --Final Boss dofile(path.."/mobs/mese_dragon.lua") diff --git a/mobs/black_scorpion.lua b/mobs/black_scorpion.lua index 73acd6a..8aa911f 100644 --- a/mobs/black_scorpion.lua +++ b/mobs/black_scorpion.lua @@ -53,7 +53,7 @@ mobs:register_mob("nssm:black_scorpion", { die_end = 210, }, custom_attack = function (self) - if math.random(1,100) == 1 then + if math.random(1,30) == 1 then set_animation(self, "punch2") self.attack:punch(self.object, 1.0, { full_punch_interval = 1.0, diff --git a/mobs/phoenix.lua b/mobs/phoenix.lua index 92e25b4..1a920ff 100644 --- a/mobs/phoenix.lua +++ b/mobs/phoenix.lua @@ -48,9 +48,8 @@ mobs:register_mob("nssm:phoenix", { blood_amount=50, on_rightclick = nil, fly = true, - attack_type = "shoot", - arrow = "nssm:phoenix_arrow", - reach = 1, + attack_type = "dogfight", + reach = 15, shoot_interval = 4, animation = { speed_normal = 25, @@ -65,5 +64,68 @@ mobs:register_mob("nssm:phoenix", { punch_end = 110, shoot_start = 80, shoot_end = 110, - } + }, + custom_attack = function(self) + local p = self.attack:getpos() + local s = self.object:getpos() + local vel = vector.subtract(p,s) + + minetest.add_particlespawner( + 125, --amount + 0.5, --time + s, --minpos + s, --maxpos + vector.multiply(vel, 0.5), --minvel + vector.multiply(vel, 1.4), --maxvel + {x=0,y=0,z=0}, --minacc + {x=0,y=0,z=0}, --maxacc + 2, --minexptime + 4, --maxexptime + 10, --minsize + 20, --maxsize + true, --collisiondetection + "phoenix_fire.png" --texture + ) + + + --local dir = placer:get_look_dir() + --local playerpos = placer:getpos() + local obj = minetest.add_entity(s, "nssm:phoenix_dart") + local ran = math.random(7,14)/10 + local vec = vector.multiply(vel, ran) + obj:setvelocity(vec) + + minetest.after(0.5, function() + local p = self.attack:getpos() + local vel = vector.subtract(p,s) + local obj = minetest.add_entity(s, "nssm:phoenix_dart") + local ran = math.random(7,14)/10 + local vec = vector.multiply(vel, ran) + obj:setvelocity(vec) + end) + + end, +}) + + +minetest.register_entity("nssm:phoenix_dart", { + textures = {"transparent.png"}, + on_step = function(self, dtime) + self.timer = (self.timer) or os.time() + self.attack = (self.attack) or os.time() + if os.time() - self.timer > 4 then + self.object:remove() + end + local all_objects = minetest.get_objects_inside_radius(self.object:getpos(), 1) + local players = {} + local _,obj + for _,obj in ipairs(all_objects) do + if obj:is_player() then + obj:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 1} + }, nil) + end + end + end, }) diff --git a/mobs/pumpboom.lua b/mobs/pumpboom.lua index f36700e..786004a 100644 --- a/mobs/pumpboom.lua +++ b/mobs/pumpboom.lua @@ -15,8 +15,8 @@ mobs:register_mob("nssm:pumpboom_small", { walk_velocity = 1, run_velocity = 2.5, sounds = { - explode = "tnt_explode", - random = "pumpboom", + explode = "tnt_explode", + random = "pumpboom", }, damage = 1.5, jump = true, @@ -74,8 +74,8 @@ mobs:register_mob("nssm:pumpboom_medium", { explosion_radius = 3, run_velocity = 2.5, sounds = { - explode = "tnt_explode", - random = "pumpboom", + explode = "tnt_explode", + random = "pumpboom", }, damage = 1.5, jump = true, @@ -133,8 +133,8 @@ mobs:register_mob("nssm:pumpboom_large", { walk_velocity = 2, run_velocity = 3, sounds = { - explode = "tnt_explode", - random = "pumpboom", + explode = "tnt_explode", + random = "pumpboom", }, damage = 1.5, jump = true, diff --git a/mobs/salamander.lua b/mobs/salamander.lua new file mode 100644 index 0000000..d7f679a --- /dev/null +++ b/mobs/salamander.lua @@ -0,0 +1,77 @@ +mobs:register_mob("nssm:salamander", { + type = "monster", + hp_max = 35, + hp_min = 24, + collisionbox = {-0.6, -0.8, -0.6, 0.6, 0.4, 0.5}, + visual = "mesh", + rotate = 270, + mesh = "salamander.x", + textures = {{"salamander.png"}}, + visual_size = {x=12, y=12}, + fear_height = 4, + makes_footstep_sound = true, + view_range = 24, + walk_velocity = 2, + run_velocity = 4, + damage = 6, + jump = true, + drops = { + {name = "nssm:life_energy", + chance = 1, + min = 1, + max = 2,}, + {name = "nssm:duck_legs", + chance = 1, + min = 1, + max = 8,}, + {name = "nssm:silk_gland", + chance = 2, + min = 1, + max = 2,}, + {name = "nssm:black_duck_feather", + chance = 3, + min = 1, + max = 4,}, + {name = "nssm:duck_beak", + chance = 5, + min = 1, + max = 1,}, + }, + armor = 80, + drawtype = "front", + water_damage = 2, + lava_damage = 5, + light_damage = 0, + group_attack=true, + attack_animals=true, + knock_back=2, + blood_texture="nssm_blood.png", + stepheight=1.5, + on_rightclick = nil, + dogshoot_switch = true, + attack_type = "dogshoot", + arrow = "nssm:lava_block_bomb", + reach = 2, + shoot_interval = 2, + shoot_offset = 2, + animation = { + speed_normal = 25, + speed_run = 35, + stand_start = 0, + stand_end = 80, + walk_start = 110, + walk_end = 150, + run_start = 110, + run_end = 150, + punch_start = 160, + punch_end = 180, + shoot_start = 200, + shoot_end = 250, + die_start = 80, + die_end = 100, + --[[ + swim_start = 260, + swim_end = 300, + ]] + } +}) diff --git a/nssm_materials.lua b/nssm_materials.lua index 956b8fd..881511d 100644 --- a/nssm_materials.lua +++ b/nssm_materials.lua @@ -1901,7 +1901,9 @@ function nssm_register_egg (name, descr) core.after(0.1, function() minetest.add_entity(pos1, "nssm:".. name) end) - itemstack:take_item() + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end return itemstack end, }) @@ -1917,7 +1919,9 @@ function nssm_register_egg2 (name, descr) --mobs you can't catch core.after(0.1, function() minetest.add_entity(pos1, "nssm:".. name) end) - itemstack:take_item() + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end return itemstack end, }) @@ -1985,6 +1989,7 @@ nssm_register_egg2 ('morgut', 'Morgut') nssm_register_egg2 ('morde', 'Morde') nssm_register_egg2 ('morlu', 'Morlu') nssm_register_egg2 ('morwa', 'Morwa') +nssm_register_egg ('salamander', 'Salamander') --nssm_register_egg ('morvalar', 'Morvalar') minetest.register_craftitem("nssm:mese_egg", { @@ -2013,7 +2018,9 @@ minetest.register_craftitem("nssm:mese_egg", { core.after(0.4, function() minetest.add_entity(pos1, "nssm:mese_dragon") end) - itemstack:take_item() + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end return itemstack end, }) diff --git a/todo.txt b/todo.txt index c647a6e..e7b3e7c 100644 --- a/todo.txt +++ b/todo.txt @@ -1,20 +1,16 @@ Codice: - - Mantis deve diventare invisibile se non sta attaccando/correndo (texture e animazioni Emmo) -> semifatto - - Scorpione deve fare un colpo letale con il pungiglione -> fatto (probabilità 1 su 30 Fra) - - Il Berinhog danneggia con i suoi aculei chi lo attacca -> fatto - - Icelizard ha un raggio d'azione troppo ampio! -> dimezzato il raggio dell'esplosione + - Mantis problema animazioni (fra) - I Pumboom droppano gli oggetti quando esplodono! (Controllare se anche quelli di tenplus, Fra) - Attacco tartacacia: ti pianta nel terreno facendo danno o apre una voragine sotto di te. -> Iniziato Fra - Attacco lanciafango del chog - - Nuovo modo di attaccare della Fenice + - Nuovo modo di attaccare della Fenice ->semifatto - Icelamander lagga malissimo (controllare anche i suoi amici) - Mese Dragon da rifare (lagga, più piccolo, non attacca) - Envy sword scambia life energy - - Uova in modalità creativa - Mantis beast - Ahuizotl (?) - Albino Spider - - Salamander (dogshootta lava (un blocco)) + - Salamander (dogshootta lava (un blocco)) ->semifatto - Flust mangia le armature di metallo e non viene danneggiato dalle armi di metallo - Spawn - Togliere il coccodrillo e la swimming duck dai fiumi @@ -28,7 +24,6 @@ Emmo vorrebbe: Modelli: - -Animazioni Salamandra -Animazioni Ahuizotl -Animazioni Albino Spider -Flust