diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index ecf436664a0d9e288f41fa79cad3c72a793bdcc8..3388d952cbd87c66f46b47dedbe56ede5828b2de 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -366,6 +366,20 @@ function _M:act() if self.never_act then return false end + -- Compute bonuses based on actors in FOV + if self:knowTalent(self.T_MILITANT_MIND) and not self:hasEffect(self.EFF_MILITANT_MIND) then + local nb_foes = 0 + local act + for i = 1, #self.fov.actors_dist do + act = self.fov.actors_dist[i] + if self:reactionToward(act) < 0 and self:canSee(act) then nb_foes = nb_foes + 1 end + end + if nb_foes > 1 then + nb_foes = math.min(nb_foes, self:getTalentLevel(self.T_MILITANT_MIND)) + self:setEffect(self.EFF_MILITANT_MIND, 4, {power=self:getTalentLevel(self.T_MILITANT_MIND) * nb_foes * 0.6}) + end + end + return true end diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index ebfcc59b39091cebafa6b0cca9969127d3c2cf71..88d081f8b4c851db6c46d827d182b2af2d4f47c4 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -217,7 +217,12 @@ function _M:attackTargetWith(target, weapon, damtype, mult) local atk, def = self:combatAttack(weapon), target:combatDefense() if not self:canSee(target) then atk = atk / 3 end local dam, apr, armor = self:combatDamage(weapon), self:combatAPR(weapon), target:combatArmor() - print("[ATTACK] to ", target.name, " :: ", dam, apr, armor, "::", mult) + print("[ATTACK] to ", target.name, " :: ", dam, apr, armor, def, "::", mult) + + if target:knowTalent(target.T_DUCK_AND_DODGE) then + local diff = util.bound((self.size_category or 3) - (target.size_category or 2), 0, 5) + def = def + diff * target:getTalentLevelRaw(target.T_DUCK_AND_DODGE) * 1.2 + end -- If hit is over 0 it connects, if it is 0 we still have 50% chance local hitted = false diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua index 147380cd8fac2c7c0dfdf8bb4ebe393c1711f403..978c0d0563795197ac734b84e8225d6e993175dc 100644 --- a/game/modules/tome/data/talents/misc/races.lua +++ b/game/modules/tome/data/talents/misc/races.lua @@ -478,6 +478,50 @@ newTalent{ end, } +newTalent{ + name = "Duck and Dodge", + type = {"race/halfling", 2}, + require = racial_req2, + points = 5, + mode = "passive", + info = function(self, t) + return ([[Halfling have long learnt to use their small stature as an advantage when fighting the other races. + Increases defense in melee based on the size difference between the attacker and you (+%d defence per size).]]): + format(self:getTalentLevelRaw(t) * 1.2) + end, +} + +newTalent{ + name = "Militant Mind", + type = {"race/halfling", 3}, + require = racial_req3, + points = 5, + mode = "passive", + info = function(self, t) + return ([[Halfling have always been a very organised and methodical race, the more foes they face the more organised they are. + If two or more foes are in sight your physical power, spellpower and mindpower are increased by %0.1f per foes (up to %d foes).]]): + format(self:getTalentLevel(t) * 0.6, self:getTalentLevel(t)) + end, +} + +newTalent{ + name = "Indomitable", + type = {"race/halfling", 4}, + require = racial_req4, + points = 5, + no_energy = true, + cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 5 end, + tactical = { DEFEND = 1 }, + action = function(self, t) + self:setEffect(self.EFF_FREE_ACTION, 3 + self:getTalentLevel(t), {}) + return true + end, + info = function(self, t) + return ([[Halflings are one of the more powerful military force of the known world, they have been at war with most other races for thousand of years. + Instantly makes you immune to stuns, dazes and pinning effects for %d turns.]]):format(3 + self:getTalentLevel(t)) + end, +} + ------------------------------------------------------------------ -- Orcs powers ------------------------------------------------------------------ diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua index 030c68d372d9e49f950f4f2c65c029e47d402ea2..c974bd7de0bc4e06636947a0993fd68aacf737fd 100644 --- a/game/modules/tome/data/timed_effects.lua +++ b/game/modules/tome/data/timed_effects.lua @@ -3517,4 +3517,23 @@ newEffect{ end, deactivate = function(self, eff) end, -} \ No newline at end of file +} + +newEffect{ + name = "MILITANT_MIND", + desc = "Militant Mind", + long_desc = function(self, eff) return ("Increases physical power, spellpower and mindpower by %d."):format(eff.power) end, + type = "other", + status = "beneficial", + parameters = { power=10 }, + activate = function(self, eff) + eff.damid = self:addTemporaryValue("combat_dam", eff.power) + eff.spellid = self:addTemporaryValue("combat_spellpower", eff.power) + eff.mindid = self:addTemporaryValue("combat_mindpower", eff.power) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("combat_dam", eff.damid) + self:removeTemporaryValue("combat_spellpower", eff.spellid) + self:removeTemporaryValue("combat_mindpower", eff.mindid) + end, +} diff --git a/ideas/races.ods b/ideas/races.ods index 24dc9dcf46c115bd5a4d8bc9a97490b7d1572dca..1bb4474747546c775fce39284bfe176863060ea4 100644 Binary files a/ideas/races.ods and b/ideas/races.ods differ