diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index a71cc2be7d1903e4ac0bf5bcc4e6f4a0570ae6b5..5b2105ace49a079904d69b6044d25f3780f80e55 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -343,7 +343,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult) if hitted and not target.dead and target:attr("equilibrium_regen_on_hit") then target:incEquilibrium(-target.equilibrium_regen_on_hit) end -- Riposte! - if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_RIPOSTE) and rng.percent(util.bound(target:getTalentLevel(target.T_RIPOSTE) * target:getDex(40), 10, 60)) then + if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_RIPOSTE) and rng.percent(target:getTalentLevel(target.T_RIPOSTE) * (5 + target:getDex(5)) then game.logSeen(self, "%s ripostes!", target.name:capitalize()) target:attackTarget(self, nil, nil, true) end diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua index 94b40e26a5d5c2e734eecd13dce99e54fff7e48c..aa1197a4282034428608538fbee89a20c0257490 100644 --- a/game/modules/tome/data/general/objects/world-artifacts.lua +++ b/game/modules/tome/data/general/objects/world-artifacts.lua @@ -128,6 +128,33 @@ newEntity{ base = "BASE_RING", }, } +newEntity{ base = "BASE_RING", + unique = true, + name = "Echo of Melkor", color = colors.DARK_GREY, + unided_name = "deep black amulet", + desc = [[This ancient charm still retains a distant echo of the earth-rending scream let forth by Morgoth when attacked by Ungoliant in the vale of Lammoth.]], + level_range = {30, 39}, + rarity = 290, + cost = 500, + material_level = 4, + + wielder = { + combat_armor = 4, + combat_def = 6, + }, + max_power = 300, power_regen = 1, + use_power = { name = "destructive wail", power = 300, + use = function(self, who) + who:project({type="ball", range=0, friendlyfire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1) + who:project({type="ball", range=0, friendlyfire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1) + who:project({type="ball", range=0, friendlyfire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1) + who:project({type="ball", range=0, friendlyfire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1) + who:project({type="ball", range=0, friendlyfire=false, radius=3}, who.x, who.y, engine.DamageType.PHYSICAL, 100 + who:getMag() * 2) + game.logSeen(who, "%s uses the %s!", who.name:capitalize(), self:getName()) + end + }, +} + newEntity{ base = "BASE_LITE", define_as = "PHIAL_GALADRIEL", unique = true, name = "Phial of Galadriel", @@ -372,6 +399,30 @@ newEntity{ base = "BASE_SHIELD", }, } +newEntity{ base = "BASE_SHIELD", + unique = true, + name = "Titanic", + unided_name = "huge shield", + desc = [[This huge shield made of the darkest galvorn is huge, heavy and very solid.]], + color = colors.GREY, + level_range = {20, 30}, + rarity = 270, + require = { stat = { str=37 }, }, + cost = 300, + material_level = 4, + special_combat = { + dam = 48, + physcrit = 4.5, + dammod = {str=1}, + }, + wielder = { + combat_armor = 18, + combat_def = 20, + combat_def_ranged = 10, + fatigue = 30, + }, +} + newEntity{ base = "BASE_LIGHT_ARMOR", unique = true, name = "Leather Armour of Eowen Nazgul-bane", diff --git a/game/modules/tome/data/talents/spells/water.lua b/game/modules/tome/data/talents/spells/water.lua index f9ed9cd0cfb1213689fc28e04c771775adf70137..4d642b3e794a7c764f14ffd9d10fd198b231191b 100644 --- a/game/modules/tome/data/talents/spells/water.lua +++ b/game/modules/tome/data/talents/spells/water.lua @@ -119,8 +119,8 @@ newTalent{ return true end, info = function(self, t) - return ([[A wall of water rushes out from the caster doing %0.2f cold damage and knocking back targets each turn for %d turns. - The damage and duration will increase with the Magic stat]]):format(damDesc(self, DamageType.COLD, self:combatTalentSpellDamage(t, 5, 90)), 5 + self:combatSpellpower(0.01) * self:getTalentLevel(t)) + return ([[A wall of water rushes out from the caster doing %0.2f cold damage and %0.2f physical damage as well as knocking back targets each turn for %d turns. + The damage and duration will increase with the Magic stat]]):format(damDesc(self, DamageType.COLD, self:combatTalentSpellDamage(t, 5, 90)/2), damDesc(self, DamageType.PHYSICAL, self:combatTalentSpellDamage(t, 5, 90)/2), 5 + self:combatSpellpower(0.01) * self:getTalentLevel(t)) end, } diff --git a/game/modules/tome/data/talents/techniques/weaponshield.lua b/game/modules/tome/data/talents/techniques/weaponshield.lua index cf167d7d4018dd18f2e6e942af1159e1f2f0a835..c887248b5989cdd2cb847eb14fd47c4603f32dd2 100644 --- a/game/modules/tome/data/talents/techniques/weaponshield.lua +++ b/game/modules/tome/data/talents/techniques/weaponshield.lua @@ -57,7 +57,7 @@ newTalent{ end, info = function(self, t) return ([[Hits the target with two shield strikes, stunning it and doing %d%% shield damage. - The damage multiplier increases with your strength.]]):format(100 * self:combatTalentWeaponDamage(t, 1.2, 2.1, self:getTalentLevel(self.T_SHIELD_EXPERTISE))) + The damage multiplier increases with your strength and the duration with talent level.]]):format(100 * self:combatTalentWeaponDamage(t, 1.2, 2.1, self:getTalentLevel(self.T_SHIELD_EXPERTISE))) end, } @@ -68,7 +68,7 @@ newTalent{ mode = "passive", points = 5, info = function(self, t) - return ([[When you block/avoid a melee blow you have a %d%% chance to get a free, automatic melee attack against your foe.]]):format(util.bound(self:getTalentLevel(t) * self:getDex(40), 10, 60)) + return ([[When you block/avoid a melee blow you have a %d%% chance to get a free, automatic melee attack against your foe. Your chances increase with dexterity.]]):format(self:getTalentLevel(t) * (5 + self:getDex(5)) end, } @@ -113,7 +113,7 @@ newTalent{ end, info = function(self, t) return ([[Hits the target with your weapon and two shield strikes doing %d%% damage, trying to overpower your target. - If the last attack hits, the target is knocked back.]]):format(100 * self:combatTalentWeaponDamage(t, 0.8, 1.3, self:getTalentLevel(self.T_SHIELD_EXPERTISE))) + If the last attack hits, the target is knocked back. The chance for knock back increases with talent level.]]):format(100 * self:combatTalentWeaponDamage(t, 0.8, 1.3, self:getTalentLevel(self.T_SHIELD_EXPERTISE))) end, } @@ -191,7 +191,7 @@ newTalent{ return true end, info = function(self, t) - return ([[Let all your foes pile up on your shield, then put all your strength in one mighty thrust and repel them all away %d grids.]]):format(math.floor(1 + self:getTalentLevel(t))) + return ([[Let all your foes pile up on your shield, then put all your strength in one mighty thrust and repel them all away %d grids. The distance increases with talent level.]]):format(math.floor(1 + self:getTalentLevel(t))) end, } @@ -234,7 +234,7 @@ newTalent{ return true end, info = function(self, t) - return ([[Enter a protective battle stance, increasing defense by %d and armor by %d at the cost of 10 attack and 10 damage. + return ([[Enter a protective battle stance, increasing defense by %d and armor by %d at the cost of 10 attack and 10 damage. The defense and armor increase is based on dexterity. At level 5 it also makes you immune to stunning and knockback.]]):format( 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE), 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE) @@ -253,11 +253,11 @@ newTalent{ self.combat_spellresist = self.combat_spellresist + 2 end, on_unlearn = function(self, t) - self.combat_physresist = self.combat_physresist + 4 - self.combat_spellresist = self.combat_spellresist + 2 + self.combat_physresist = self.combat_physresist - 4 + self.combat_spellresist = self.combat_spellresist - 2 end, info = function(self, t) - return ([[Improves your damage with shield attacks and increases your spell and physical save.]]):format() + return ([[Improves your damage with shield attacks and increases your spell(+%d) and physical(+%d) saves.]]):format(2 * self:getTalentLevelRaw(t), 4 * self:getTalentLevelRaw(t)) end, } @@ -289,7 +289,7 @@ newTalent{ return true end, info = function(self, t) - return ([[You brace yourself for the final stand, increasing defense by %d and maximum life by %d, but making you unable to move.]]): + return ([[You brace yourself for the final stand, increasing defense by %d and maximum life by %d, but making you unable to move. The increase in defense and life is based on dexterity.]]): format(5 + self:getDex(4) * self:getTalentLevel(t), 10 * self:getTalentLevel(t)) end, } diff --git a/game/modules/tome/data/zones/caverns-osse/zone.lua b/game/modules/tome/data/zones/caverns-osse/zone.lua index 8d096d90e1fc01164133207820a24c47fa0d25ab..7581d9ede70f76c37e55dd528cf2a0c19b2ce42a 100644 --- a/game/modules/tome/data/zones/caverns-osse/zone.lua +++ b/game/modules/tome/data/zones/caverns-osse/zone.lua @@ -22,7 +22,6 @@ return { level_range = {30, 40}, level_scheme = "player", max_level = 3, - decay = {300, 800}, actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end, width = 70, height = 70, -- all_remembered = true, diff --git a/game/modules/tome/data/zones/moria/zone.lua b/game/modules/tome/data/zones/moria/zone.lua index 9dfc932c2aeb890679e906f93f129211e0518a06..519e49f9f31bc6915110c973e0eeaca5b17722ca 100644 --- a/game/modules/tome/data/zones/moria/zone.lua +++ b/game/modules/tome/data/zones/moria/zone.lua @@ -61,6 +61,7 @@ return { }, }, }, [4] = { + decay = false, generator = { map = { class = "engine.generator.map.Static",