Skip to content
Snippets Groups Projects
Commit 9f572567 authored by DarkGod's avatar DarkGod
Browse files

Diggers now provide a dig talent and can be used while carrier instead of wielded

parent 71ce6613
No related branches found
No related tags found
No related merge requests found
......@@ -3010,6 +3010,13 @@ function _M:onAddObject(o)
engine.interface.ActorInventory.onAddObject(self, o)
-- Learn Talent
if o.carrier and o.carrier.learn_talent then
for tid, level in pairs(o.carrier.learn_talent) do
self:learnItemTalent(o, tid, level)
end
end
self:checkEncumbrance()
-- Achievement checks
......@@ -3025,6 +3032,12 @@ end
function _M:onRemoveObject(o)
engine.interface.ActorInventory.onRemoveObject(self, o)
if o.carrier and o.carrier.learn_talent then
for tid, level in pairs(o.carrier.learn_talent) do
self:unlearnItemTalent(o, tid, level)
end
end
self:checkEncumbrance()
end
......
......@@ -17,6 +17,9 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
local Stats = require "engine.interface.ActorStats"
local Talents = require "engine.interface.ActorTalents"
newEntity{
define_as = "BASE_DIGGER",
slot = "TOOL",
......@@ -27,31 +30,9 @@ newEntity{
desc = [[Allows you to dig a wall, remove a tree, create ways.]],
add_name = " (#DIGSPEED#)",
max_power = 1, power_regen = 1,
use_power = { name = "dig a wall, cut a tree, ...", power = 0, use = function(self, who)
local tg = {type="bolt", range=1, nolock=true}
local x, y = who:getTarget(tg)
if not x or not y then return nil end
local wait = function()
local co = coroutine.running()
local ok = false
who:restInit(self.digspeed, "digging", "dug", function(cnt, max)
if cnt > max then ok = true end
coroutine.resume(co)
end)
coroutine.yield()
if not ok then
game.logPlayer(who, "You have been interrupted!")
return false
end
return true
end
if wait() then
who:project(tg, x, y, engine.DamageType.DIG, 1)
end
return {id=true, used=true}
end},
carrier = {
learn_talent = { [Talents.T_DIG_OBJECT] = 1, },
},
egos = "/data/general/objects/egos/digger.lua", egos_chance = resolvers.mbonus(10, 5),
}
......@@ -62,6 +43,9 @@ newEntity{ base = "BASE_DIGGER",
cost = 3,
material_level = 1,
digspeed = resolvers.rngavg(35,40),
wielder = {
inc_stats = { [Stats.STAT_STR] = 1, },
},
}
newEntity{ base = "BASE_DIGGER",
......@@ -70,6 +54,9 @@ newEntity{ base = "BASE_DIGGER",
cost = 3,
material_level = 3,
digspeed = resolvers.rngavg(27,33),
wielder = {
inc_stats = { [Stats.STAT_STR] = 2, },
},
}
newEntity{ base = "BASE_DIGGER",
......@@ -78,4 +65,7 @@ newEntity{ base = "BASE_DIGGER",
cost = 3,
material_level = 5,
digspeed = resolvers.rngavg(20,25),
wielder = {
inc_stats = { [Stats.STAT_STR] = 3, },
},
}
game/modules/tome/data/gfx/talents/dig_object.png

3.1 KiB

......@@ -401,4 +401,55 @@ newTalent{
info = function(self, t)
return ([[Remove any talent Morrigor has absorbed.]])
end,
}
\ No newline at end of file
}
newTalent{
name = "Dig", short_name = "DIG_OBJECT",
type = {"misc/objects", 1},
findBest = function(self, t)
local best = nil
local find = function(inven)
for item, o in ipairs(inven) do
if o.digspeed and (not best or o.digspeed < best.digspeed) then best = o end
end
end
for inven_id, inven in pairs(self.inven) do find(inven) end
return best
end,
points = 1,
hard_cap = 1,
no_npc_use = true,
action = function(self, t)
local best = t.findBest(self, t)
if not best then game.logPlayer(self, "You require a digger to dig.") return end
local tg = {type="bolt", range=1, nolock=true}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local wait = function()
local co = coroutine.running()
local ok = false
self:restInit(best.digspeed, "digging", "dug", function(cnt, max)
if cnt > max then ok = true end
coroutine.resume(co)
end)
coroutine.yield()
if not ok then
game.logPlayer(self, "You have been interrupted!")
return false
end
return true
end
if wait() then
self:project(tg, x, y, engine.DamageType.DIG, 1)
end
return true
end,
info = function(self, t)
local best = t.findBest(self, t) or {digspeed=100}
return ([[Dig/cut a tree/...
Digging takes %d turns (based on your currently best digger available).]]):format(best.digspeed)
end,
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment