From 5f09951a56b07faa780c29789dac4f86dd1dcd2c Mon Sep 17 00:00:00 2001 From: Duane Robertson Date: Tue, 17 May 2016 03:03:28 -0500 Subject: [PATCH] Lower cold damage and add ice goblins. --- goblin_ice.lua | 143 +++++++++++++++++++++++++++++ mapgen.lua | 2 +- mobs.lua | 1 + nodes.lua | 39 +++----- textures/fun_caves_goblin_ice2.png | Bin 0 -> 3548 bytes 5 files changed, 160 insertions(+), 25 deletions(-) create mode 100644 goblin_ice.lua create mode 100644 textures/fun_caves_goblin_ice2.png diff --git a/goblin_ice.lua b/goblin_ice.lua new file mode 100644 index 0000000..36e784e --- /dev/null +++ b/goblin_ice.lua @@ -0,0 +1,143 @@ + + +mobs:register_mob("fun_caves:goblin_ice", { + description = "Ice Goblin", + type = "animal", + passive = false, + damage = 1, + attack_type = "dogfight", + attacks_monsters = true, + hp_min = 5, + hp_max = 10, + armor = 100, + collisionbox = {-0.35,-1,-0.35, 0.35,-.1,0.35}, + visual = "mesh", + mesh = "goblins_goblin.b3d", + drawtype = "front", + textures = { + {"fun_caves_goblin_ice2.png"}, + }, + makes_footstep_sound = true, + sounds = { + random = "goblins_goblin_ambient", + warcry = "goblins_goblin_attack", + attack = "goblins_goblin_attack", + damage = "goblins_goblin_damage", + death = "goblins_goblin_death", + distance = 15, + }, + walk_velocity = 2, + run_velocity = 3, + jump = true, + drops = { + {name = "default:coal_lump", + chance = 1, min = 1, max = 3}, + {name = "fun_caves:mushroom_steak", + chance = 2, min = 1, max = 2}, + {name = "default:torch", + chance = 3, min = 1, max = 10}, + }, + water_damage = 0, + lava_damage = 4, + cold_damage = 0, + light_damage = 0, + follow = {"default:diamond"}, + view_range = 10, + owner = "", + order = "follow", + animation = { + speed_normal = 30, + speed_run = 30, + stand_start = 0, + stand_end = 79, + walk_start = 168, + walk_end = 187, + run_start = 168, + run_end = 187, + punch_start = 200, + punch_end = 219, + }, + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + local name = clicker:get_player_name() + + -- feed to heal goblin + if item:get_name() == "fun_caves:mushroom_steak" + or item:get_name() == "farming:bread" then + + local hp = self.object:get_hp() + -- return if full health + if hp >= self.hp_max then + minetest.chat_send_player(name, "goblin at full health.") + return + end + hp = hp + 4 + if hp > self.hp_max then hp = self.hp_max end + self.object:set_hp(hp) + -- take item + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + + -- right clicking with gold lump drops random item from fun_caves.goblin_drops + elseif item:get_name() == "default:gold_lump" then + if not minetest.setting_getbool("creative_mode") then + item:take_item() + clicker:set_wielded_item(item) + end + local pos = self.object:getpos() + pos.y = pos.y + 0.5 + minetest.add_item(pos, {name = fun_caves.goblin_drops[math.random(1, #fun_caves.goblin_drops)]}) + + else + -- if owner switch between follow and stand + if self.owner and self.owner == clicker:get_player_name() then + if self.order == "follow" then + self.order = "stand" + else + self.order = "follow" + end +-- else +-- self.owner = clicker:get_player_name() + end + end + + mobs:capture_mob(self, clicker, 0, 5, 80, false, nil) + end, + + do_custom = function(self) + fun_caves.search_replace(self.object:getpos(), 5, {"default:torch"}, "air") + --fun_caves.search_replace(self.object:getpos(), 20, {"default:stone"}, "default:mossycobble") + fun_caves.search_replace(self.object:getpos(), 50, {"default:ice"}, "fun_caves:ice_trap") + end, + +}) +mobs:register_egg("fun_caves:goblin_ice", "Goblin Egg (ice)", "default_mossycobble.png", 1) +mobs:register_spawn("fun_caves:goblin_ice", {"default:ice"}, 100, 0, 5 * fun_caves.goblin_spawn_frequency, 3, 31000) + +minetest.register_node("fun_caves:ice_trap", { + description = "Ice Trap", + tiles = {"default_ice.png^default_mineral_coal.png"}, + groups = {cracky = 3}, + drop = 'default:ice', + is_ground_content = false, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_abm({ + nodenames = {"fun_caves:ice_trap"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do + if object:is_player() then + minetest.set_node(pos, {name="fire:basic_flame"}) + if object:get_hp() > 0 then + object:set_hp(object:get_hp()-2) + end + end + end + end +}) + diff --git a/mapgen.lua b/mapgen.lua index c74b5e3..8bcfb61 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -298,7 +298,7 @@ function fun_caves.generate(p_minp, p_maxp, seed) local sr = math.random(1,1000) -- fluids - if (data[ivm_below] == node("default:stone") or data[ivm_below] == node("fun_caves:hot_cobble")) and sr < 10 then + if (data[ivm_below] == node("default:stone") or data[ivm_below] == node("fun_caves:hot_cobble")) and sr < 20 then data[ivm] = node("default:lava_source") elseif data[ivm_below] == node("fun_caves:stone_with_moss") and sr < 5 then data[ivm] = node("default:water_source") diff --git a/mobs.lua b/mobs.lua index fcbdd6d..a7002ce 100644 --- a/mobs.lua +++ b/mobs.lua @@ -36,6 +36,7 @@ fun_caves.goblin_drops = { "default:pick_steel", "default:sword_steel", "defaul dofile(fun_caves.path.."/goblin_cobbler.lua") dofile(fun_caves.path.."/goblin_digger.lua") dofile(fun_caves.path.."/goblin_coal.lua") +dofile(fun_caves.path.."/goblin_ice.lua") dofile(fun_caves.path.."/goblin_copper.lua") dofile(fun_caves.path.."/goblin_iron.lua") dofile(fun_caves.path.."/goblin_gold.lua") diff --git a/nodes.lua b/nodes.lua index c8f9f48..446b9d3 100644 --- a/nodes.lua +++ b/nodes.lua @@ -416,37 +416,28 @@ minetest.register_node("fun_caves:hot_cobble", { local last_dps_check = 0 minetest.register_globalstep(function(dtime) - if last_dps_check < 20 then - last_dps_check = last_dps_check + 1 - else + last_dps_check = last_dps_check + 1 + if last_dps_check > 20000 then last_dps_check = 0 + end + + if last_dps_check % 20 == 0 then for id, player in pairs(minetest.get_connected_players()) do local minp = vector.subtract(player:getpos(), 0.5) local maxp = vector.add(player:getpos(), 0.5) - local counts = minetest.find_nodes_in_area(minp, maxp, {"group:surface_hot", "group:surface_cold"}) - if #counts > 3 then + + local counts = minetest.find_nodes_in_area(minp, maxp, {"group:surface_hot"}) + if #counts > 1 then player:set_hp(player:get_hp() - 1) end - end - -- This just won't work. - -- - --for id, ent in pairs(minetest.luaentities) do - -- if ent.object and not string.find(ent.name, "__built") then - -- local minp = vector.subtract(ent.object:getpos(), 1) - -- local maxp = vector.add(ent.object:getpos(), 1) - -- local counts = minetest.find_nodes_in_area(minp, maxp, {"group:hot"}) - -- if #counts > 3 then - -- ent.object:set_hp(ent.object:get_hp() - 1) - -- ent.old_health = ent.health - -- ent.health = ent.health - 1 - -- print(ent.name.." suffers, "..ent.object:get_hp().."/"..ent.health.." left") - -- --if ent.object:get_hp() < 1 then - -- -- print(dump(ent)) - -- --end - -- end - -- end - --end + if last_dps_check % 200 == 0 then + local counts = minetest.find_nodes_in_area(minp, maxp, {"group:surface_cold"}) + if #counts > 1 then + player:set_hp(player:get_hp() - 1) + end + end + end end end) diff --git a/textures/fun_caves_goblin_ice2.png b/textures/fun_caves_goblin_ice2.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa83a05a5c2f90ac07de14a8961798cf0e9ee9d GIT binary patch literal 3548 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 literal 0 HcmV?d00001