diff --git a/game/modules/tome/data/talents/undeads/ghoul.lua b/game/modules/tome/data/talents/undeads/ghoul.lua index d77dbc3b67feea35ba9e5923e913a59bf58e29cc..04ff2180bf524c2c5645d998e7f2a4e696bdaa56 100644 --- a/game/modules/tome/data/talents/undeads/ghoul.lua +++ b/game/modules/tome/data/talents/undeads/ghoul.lua @@ -23,7 +23,7 @@ newTalent{ mode = "passive", require = undeads_req1, points = 5, - statBonus = function(self, t) return math.ceil(self:combatTalentScale(t, 2, 10, 0.75)) end, + statBonus = function(self, t) return math.ceil(self:combatTalentScale(t, 2, 15, 0.75)) end, getMaxDamage = function(self, t) return math.max(50, 100 - self:getTalentLevelRaw(t) * 10) end, passives = function(self, t, p) self:talentTemporaryValue(p, "inc_stats", {[self.STAT_STR]=t.statBonus(self, t)}) @@ -44,8 +44,10 @@ newTalent{ points = 5, tactical = { CLOSEIN = 3 }, direct_hit = true, - cooldown = function(self, t) return math.max(10, 22 - self:getTalentLevelRaw(t) * 2) end, + fixed_cooldown = true, + cooldown = function(self, t) return math.floor(self:combatTalentLimit(t, 5, 25, 15)) end, range = function(self, t) return math.floor(self:combatTalentScale(t, 5, 10, 0.5, 0, 1)) end, + getSpeed = function(self, t) return math.floor(self:combatTalentLimit(t, 40, 20, 30)) end, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), nolock=true} @@ -53,6 +55,8 @@ newTalent{ if not x or not y then return nil end if core.fov.distance(self.x, self.y, x, y) > self:getTalentRange(t) then return nil end + local ox, oy = self.x, self.y + local block_actor = function(_, bx, by) return game.level.map:checkEntity(bx, by, Map.TERRAIN, "block_move", self) end local l = self:lineFOV(x, y, block_actor) local lx, ly, is_corner_blocked = l:step() @@ -70,11 +74,18 @@ newTalent{ return end self:move(fx, fy, true) + if config.settings.tome.smooth_move > 0 then + self:resetMoveAnim() + self:setMoveAnim(ox, oy, 9, 5) + end + + self:setEffect(self.EFF_GHOULISH_LEAP, 4, {speed=t.getSpeed(self, t) / 100}) return true end, info = function(self, t) - return ([[Leap toward your target.]]) + return ([[Leap toward your target. + When you land your global speed is increased by %d%% for 4 turns.]]):format(t.getSpeed(self, t)) end, } @@ -83,7 +94,7 @@ newTalent{ type = {"undead/ghoul",3}, require = undeads_req3, points = 5, - cooldown = 25, + cooldown = 20, tactical = { ATTACKAREA = function(self, t, aitarget) return not aitarget:attr("undead") and { BLIGHT = 1 } or nil end, @@ -138,10 +149,10 @@ newTalent{ requires_target = true, is_melee = true, target = function(self, t) return {type="hit", range=self:getTalentRange(t)} end, - getDamage = function(self, t) return self:combatTalentScale(t, 0.28, 0.62) end, + getDamage = function(self, t) return self:combatTalentScale(t, 0.5, 1.5) end, getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end, getDiseaseDamage = function(self, t) return self:combatTalentStatDamage(t, "con", 5, 50) end, - getStatDamage = function(self, t) return self:combatTalentStatDamage(t, "con", 5, 20) end, + getStatDamage = function(self, t) return self:combatTalentStatDamage(t, "con", 5, 50) end, spawn_ghoul = function (self, target, t) local x, y = util.findFreeGrid(target.x, target.y, 10, true, {[Map.ACTOR]=true}) if not x then return nil end @@ -169,6 +180,16 @@ newTalent{ game.level.map:particleEmitter(target.x, target.y, 1, "slime") game:playSoundNear(target, "talents/slime") m:logCombat(target, "A #GREY##Source##LAST# rises from the corpse of #Target#.") + + if game.party:hasMember(self) then + m.remove_from_party_on_death = true + game.party:addMember(m, { + control="full", + type="minion", + title="Ghoulish Minion", + orders = {target=true}, + }) + end end, action = function(self, t) local tg = self:getTalentTarget(t) @@ -206,7 +227,7 @@ newTalent{ local stat_damage = t.getStatDamage(self, t) return ([[Gnaw your target for %d%% damage. If your attack hits, the target may be infected with Ghoul Rot for %d turns. Each turn, Ghoul Rot inflicts %0.2f blight damage. At talent level 2, Ghoul Rot also reduces Strength by %d; at level 3 it reduces Dexterity by %d, and at level 4 it reduces Constitution by %d. - At talent level 5 targets suffering from Ghoul Rot rise as friendly ghouls when slain. + At talent level 5 targets suffering from Ghoul Rot rise as friendly and fully controllable ghouls when slain. The blight damage and stat damage scales with your Constitution.]]): format(100 * damage, duration, damDesc(self, DamageType.BLIGHT, disease_damage), stat_damage, stat_damage, stat_damage) end, diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua index 8cb0a928383c8392713fbedccb2eb69e002afb28..9d557945d95c1141b628fa2542de3845362cf91b 100644 --- a/game/modules/tome/data/timed_effects/physical.lua +++ b/game/modules/tome/data/timed_effects/physical.lua @@ -3487,3 +3487,21 @@ newEffect{ deactivate = function(self, eff) end, } + +newEffect{ + name = "GHOULISH_LEAP", image = "talents/ghoulish_leap.png", + desc = "Ghoulish Leap", + long_desc = function(self, eff) return ("The target's global speed is increased by %d%%."):format(eff.speed * 100) end, + type = "physical", + subtype = { speed=true }, + status = "beneficial", + parameters = { speed=0.1 }, + on_gain = function(self, err) return "#Target# speeds up.", "+Fast" end, + on_lose = function(self, err) return "#Target# slows down.", "-Fast" end, + activate = function(self, eff) + eff.tmpid = self:addTemporaryValue("global_speed_add", eff.speed) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("global_speed_add", eff.tmpid) + end, +} diff --git a/game/modules/tome/data/zones/blighted-ruins/npcs.lua b/game/modules/tome/data/zones/blighted-ruins/npcs.lua index a6c685dedb74927ad009d30dd849399e2c2b417f..f4f1f1112946cd5638f23f6aa842a5c6fc07b9d4 100644 --- a/game/modules/tome/data/zones/blighted-ruins/npcs.lua +++ b/game/modules/tome/data/zones/blighted-ruins/npcs.lua @@ -114,6 +114,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD", never_move = 1, stats = { str=5, dex=5, wil=5, mag=5, con=5, cun=5 }, ai = nil, ai_tactic = nil, ai_state = nil, + infravision = 4, combat = { dam=resolvers.levelup(5, 1, 1.2), @@ -145,6 +146,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD", never_move = 1, stats = { str=5, dex=5, wil=5, mag=5, con=5, cun=5 }, ai = nil, ai_tactic = nil, ai_state = nil, + infravision = 4, combat = { dam=resolvers.levelup(5, 1, 1.2), @@ -174,6 +176,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD", never_move = 1, stats = { str=5, dex=5, wil=5, mag=5, con=5, cun=5 }, ai = nil, ai_tactic = nil, ai_state = nil, + infravision = 4, lifesteal=15,