From 72dd324ed4c57df1410e03012cf011803d672beb Mon Sep 17 00:00:00 2001 From: Shibari <ShibariTOME@Gmail.com> Date: Thu, 25 Oct 2018 18:34:04 -0400 Subject: [PATCH] Revise revise revise --- game/modules/tome/class/Object.lua | 4 +- .../tome/data/general/objects/egos/charms.lua | 67 +++++++++++++++-- .../general/objects/egos/torques-powers.lua | 5 +- .../general/objects/egos/totems-powers.lua | 71 ++++++++----------- .../general/objects/egos/wands-powers.lua | 45 ++++++++++-- .../tome/data/timed_effects/mental.lua | 5 ++ .../modules/tome/data/timed_effects/other.lua | 15 ++++ 7 files changed, 157 insertions(+), 55 deletions(-) diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua index c1d677374b..0d6d2d8998 100644 --- a/game/modules/tome/class/Object.lua +++ b/game/modules/tome/class/Object.lua @@ -2041,9 +2041,9 @@ function _M:getUseDesc(use_actor) ret = tstring{{"color","YELLOW"}, ("It can be used to %s, with %d charges out of %d."):format(desc, math.floor(self.power / usepower(self.use_power.power)), math.floor(self.max_power / usepower(self.use_power.power))), {"color","LAST"}} elseif self.talent_cooldown then local t_name = self.talent_cooldown == "T_GLOBAL_CD" and "all charms" or "Talent "..use_actor:getTalentDisplayName(use_actor:getTalentFromId(self.talent_cooldown)) - ret = tstring{{"color","YELLOW"}, ("It can be used to %s\nActivation puts %s on cooldown for %d turns."):format(desc:format(self:getCharmPower(use_actor)), t_name, usepower(self.use_power.power)), {"color","LAST"}} + ret = tstring{{"color","YELLOW"}, ("It can be used to %s\n\nActivation puts %s on cooldown for %d turns."):format(desc:format(self:getCharmPower(use_actor)), t_name, usepower(self.use_power.power)), {"color","LAST"}} else - ret = tstring{{"color","YELLOW"}, ("It can be used to %s\nActivation costs %d power out of %d/%d."):format(desc, usepower(self.use_power.power), self.power, self.max_power), {"color","LAST"}} + ret = tstring{{"color","YELLOW"}, ("It can be used to %s\n\nActivation costs %d power out of %d/%d."):format(desc, usepower(self.use_power.power), self.power, self.max_power), {"color","LAST"}} end elseif self.use_simple then ret = tstring{{"color","YELLOW"}, ("It can be used to %s."):format(util.getval(self.use_simple.name, self, use_actor)), {"color","LAST"}} diff --git a/game/modules/tome/data/general/objects/egos/charms.lua b/game/modules/tome/data/general/objects/egos/charms.lua index cb599c8761..405a2721c4 100644 --- a/game/modules/tome/data/general/objects/egos/charms.lua +++ b/game/modules/tome/data/general/objects/egos/charms.lua @@ -112,6 +112,32 @@ newEntity{ use_power = {tactical = {BUFF = 0.2}} } +newEntity{ + name = "extending ", prefix=true, + keywords = {extending=true}, + level_range = {1, 50}, + greater_ego = 1, + unique_ego = 1, + rarity = 12, + cost = 5, + extending_amt = resolvers.mbonus_material(2, 1), + extending_dur = resolvers.mbonus_material(1.5, 1), + + charm_on_use = { + {100, function(self, who) return ("increase the duration of %d beneficial effects by %d"):format(self.extending_amt, self.extending_dur) end, function(self, who) + local effs = self:effectsFilter(function(eff) + if eff.status == "beneficial" and eff.type ~= "other" then return true end + end) + if #effs <= 0 then return end + for i = 1, math.floor(self.extending_amt) do + local eff = rng.tableRemove(effs) + eff.dur = eff.dur + math.floor(self.extending_amt) + end + end}, + }, + use_power = {tactical = {BUFF = 0.2}} +} + newEntity{ name = "evasive ", prefix=true, keywords = {evasive=true}, @@ -147,6 +173,22 @@ newEntity{ use_power = {tactical = {HEAL = 0.2}} } +newEntity{ + name = "cleansing ", prefix=true, + keywords = {cleansing=true}, + level_range = {1, 50}, + rarity = 12, + cost = 5, + greater_ego = 1, + cleansing_amount = resolvers.mbonus_material(3, 1), + charm_on_use = { + {100, function(self, who) return ("cleanse %d total effects of type disease, wound, or poison"):format(self.cleansing_amount) end, function(self, who) + who:removeEffectsFilter(function(e) return e.subtype.poison or e.subtype.wound or e.subtype.disease end, self.cleansing_amount) + end}, + }, + use_power = {tactical = {CURE = 0.2}} +} + newEntity{ name = "piercing ", prefix=true, keywords = {piercing=true}, @@ -164,12 +206,30 @@ newEntity{ use_power = {tactical = {BUFF = 0.2}} } +newEntity{ + name = "powerful ", prefix=true, + keywords = {piercing=true}, + level_range = {1, 50}, + rarity = 12, + greater_ego = 1, + unique_ego = 1, + cost = 5, + powerful_damage = resolvers.mbonus_material(30, 10), + charm_on_use = { + {100, function(self, who) return ("increase all damage by %d%% for 2 turns"):format(self.powerful_damage) end, function(self, who) + who:setEffect(who.EFF_ITEM_CHARM_POWERFUL, 2, {damage = self.powerful_damage}) + end}, + }, + use_power = {tactical = {BUFF = 0.2}} +} + +--[[ newEntity{ name = "savior's ", prefix=true, keywords = {savior=true}, level_range = {1, 50}, rarity = 12, - greater_ego = 1, + --greater_ego = 1, unique_ego = 1, cost = 5, savior_saves = resolvers.mbonus_material(30, 10), @@ -179,7 +239,7 @@ newEntity{ end}, }, use_power = {tactical = {BUFF = 0.2}} -} +}]] newEntity{ name = "innervating ", prefix=true, @@ -187,9 +247,8 @@ newEntity{ level_range = {1, 50}, rarity = 18, cost = 5, - greater_ego = 1, unique_ego = 1, - innervating_fatigue = resolvers.mbonus_material(30, 10), + innervating_fatigue = resolvers.mbonus_material(40, 20), charm_on_use = { {100, function(self, who) return ("reduce fatigue by %d%% for 2 turns"):format(self.innervating_fatigue) end, function(self, who) who:setEffect(who.EFF_ITEM_CHARM_INNERVATING, 2, {fatigue = self.innervating_fatigue}) diff --git a/game/modules/tome/data/general/objects/egos/torques-powers.lua b/game/modules/tome/data/general/objects/egos/torques-powers.lua index a3dab1062e..3e607c3a55 100644 --- a/game/modules/tome/data/general/objects/egos/torques-powers.lua +++ b/game/modules/tome/data/general/objects/egos/torques-powers.lua @@ -88,7 +88,7 @@ newEntity{ keywords = {galeforce=true}, level_range = {1, 50}, rarity = 10, - charm_power_def = {add=45, max=400, floor=true}, + charm_power_def = {add=15, max=800, floor=true}, resolvers.charm( function(self, who) local dam = who:damDesc(engine.DamageType.Mind, self.use_power.damage(self, who)) @@ -113,6 +113,7 @@ newEntity{ target:knockback(who.x, who.y, kb) end end, dam) + return {id=true, used=true} end, "T_GLOBAL_CD", { @@ -130,7 +131,7 @@ newEntity{ keywords = {mindblast=true}, level_range = {1, 50}, rarity = 10, - charm_power_def = {add=45, max=600, floor=true}, + charm_power_def = {add=25, max=600, floor=true}, resolvers.charm(function(self, who) local dam = self.use_power.damage(self, who) return ("blast the opponent's mind dealing %d mind damage and silencing them for 4 turns"):format(dam ) diff --git a/game/modules/tome/data/general/objects/egos/totems-powers.lua b/game/modules/tome/data/general/objects/egos/totems-powers.lua index be9731db2b..4ddbf615e4 100644 --- a/game/modules/tome/data/general/objects/egos/totems-powers.lua +++ b/game/modules/tome/data/general/objects/egos/totems-powers.lua @@ -24,57 +24,42 @@ Totems *thorny skin ]] +-- gfx newEntity{ - name = " of cure ailments", addon=true, instant_resolve=true, - keywords = {ailments=true}, + name = " of healing", addon=true, instant_resolve=true, + keywords = {healing=true}, level_range = {1, 50}, rarity = 8, - charm_power_def = {add=30, max=300, floor=true}, + charm_power_def = {add=50, max=500, floor=true}, resolvers.charm( function(self, who) local heal = self.use_power.heal(self, who) - return ("remove 1 poison, disease, and wound from the target then heal them for %d + %d per effect cleansed"): - format(heal, heal / 2) end, + return ("heals yourself and all friendly characters within 10 spaces for %d"): + format(heal) end, 20, function(self, who) local tg = self.use_power.target(self, who) - local x, y = who:getTarget(tg) - if not x or not y then return nil end + local heal = who:mindCrit(self.use_power.heal(self, who)) game.logSeen(who, "%s activates %s %s!", who.name:capitalize(), who:his_her(), self:getName{no_add_name = true, do_color = true}) - who:project(tg, x, y, function(px, py) + who:project(tg, who.x, who.y, function(px, py) local target = game.level.map(px, py, engine.Map.ACTOR) if not target then return end - local cleansed = 0 - local heal = self.use_power.heal(self, who) - - cleansed = cleansed + target:removeEffectsFilter(function(e) return e.subtype.poison end, 1) - cleansed = cleansed + target:removeEffectsFilter(function(e) return e.subtype.cut end, 1) - cleansed = cleansed + target:removeEffectsFilter(function(e) return e.subtype.disease end, 1) - - target:attr("allow_on_heal", 1) - target:heal(heal + (heal / 2 * cleansed), who) - target:attr("allow_on_heal", -1) - game:playSoundNear(who, "talents/heal") + if target:reactionToward(who) < 0 then return end + target:attr("allow_on_heal", 1) + target:heal(heal, who) + target:attr("allow_on_heal", -1) + game:playSoundNear(who, "talents/heal") + end) return {id=true, used=true} - end) end, + end, "T_GLOBAL_CD", - {range = function(self, who) return 10 end, + { + radius = function(self, who) return 10 end, heal = function(self, who) return self:getCharmPower(who) end, - target = function(self, who) return {default_target=who, type="hit", nowarning=true, range=self.use_power.range(self, who), first_target="friend"} end, - tactical = {CURE = function(who, t, aitarget) -- count number of effects that can be removed - local nb = 0 - for eff_id, p in pairs(who.tmp) do - local e = who.tempeffect_def[eff_id] - if e.status == "detrimental" and (e.subtype.poison or e.subtype.disease) then - nb = nb + 1 - end - end - return nb - end, - __wt_cache_turns = 0 - }, - }), + target = function(self, who) return {type="ball", nowarning=true, radius=self.use_power.radius(self, who)} end, + tactical = {HEAL = 1}, + }) } newEntity{ @@ -83,12 +68,12 @@ newEntity{ level_range = {1, 50}, rarity = 8, - charm_power_def = {add=25, max=600, floor=true}, + charm_power_def = {add=15, max=800, floor=true}, resolvers.charm(function(self, who) local dam = self.use_power.damage(self, who) return ("instantly sting an enemy dealing %d nature damage over 7 turns and reducing their healing by 50%%%%"):format(dam, 50) end, - 10, + 12, function(self, who) local tg = self.use_power.target(self, who) local x, y = who:getTarget(tg) @@ -136,9 +121,9 @@ newEntity{ charm_power_def = {add=45, max=500, floor=true}, resolvers.charm(function(self, who) local stats = self.use_power.tentacleStats(self, who) - local str = ("(Tentacle Bonus Stats)\nLife: %d\nBase Damage: %d\nArmor: %d\nAll Resist: %d"):format(stats.max_life, stats.combat.dam, stats.combat_armor, stats.resists.all) - return ("summon a resilient tentacle up to %d spaces away. Each turn the tentacle will strike a random enemy in range 3 dealing physical damage and attempting to pin them.\n\n%s"): - format(5, str) + local str = ("(Tentacle Stats)\nLife: %d\nBase Damage: %d\nArmor: %d\nAll Resist: %d"):format(stats.max_life, stats.combat.dam, stats.combat_armor, stats.resists.all) + return ("summon a resilient tentacle up to %d spaces away for %d turns. Each turn the tentacle will strike a random enemy in range 3 dealing physical damage and attempting to pin them.\n\n%s"): + format(5, stats.summon_time, str) end, 20, function(self, who) @@ -201,7 +186,7 @@ newEntity{ end, faction = who.faction, summoner = who, summoner_gain_exp=true, - summon_time=10, + summon_time = 0, } m:resolve() @@ -212,7 +197,6 @@ newEntity{ control=false, type="summon", title="Summon", - orders = {target=true, leash=true, anchor=true, talents=true}, }) local stats = self.use_power.tentacleStats(self, who) @@ -233,7 +217,8 @@ newEntity{ combat = {dam = resolvers.mbonus_material(100, 0)}, max_life = resolvers.mbonus_material(400, 0), combat_armor = resolvers.mbonus_material(50, 0), - resists = {all = resolvers.mbonus_material(50, 0)} + resists = {all = resolvers.mbonus_material(50, 0)}, + summon_time = resolvers.mbonus_material(10, 3), }, tentacleStats = function(self, who) local stats = { diff --git a/game/modules/tome/data/general/objects/egos/wands-powers.lua b/game/modules/tome/data/general/objects/egos/wands-powers.lua index 6192471fb3..21455dbdb8 100644 --- a/game/modules/tome/data/general/objects/egos/wands-powers.lua +++ b/game/modules/tome/data/general/objects/egos/wands-powers.lua @@ -61,7 +61,7 @@ newEntity{ level_range = {1, 50}, rarity = 10, - charm_power_def = {add=25, max=400, floor=true}, + charm_power_def = {add=10, max=400, floor=true}, resolvers.charm(function(self, who) local dam = who:damDesc(engine.DamageType.LIGHTNING, self.use_power.damage(self, who)) local radius = self.use_power.radius @@ -88,11 +88,11 @@ newEntity{ "T_GLOBAL_CD", { range = 8, - radius = 3, + radius = 4, requires_target = true, no_npc_use = function(self, who) return self:restrictAIUseObject(who) end, -- don't let dumb ai hurt friends target = function(self, who) return {type="ball", range=self.use_power.range, radius=self.use_power.radius} end, - tactical = {ATTACKAREA = {FIRE = 2}}, + tactical = {ATTACKAREA = {LIGHTNING = 2}}, damage = function(self, who) return self:getCharmPower(who) end }), } @@ -112,7 +112,7 @@ newEntity{ } end), - charm_power_def = {add=50, max=700, floor=true}, + charm_power_def = {add=30, max=800, floor=true}, resolvers.charm(function(self, who) local dam = self.use_power.damage(self, who) return ("fire a magical bolt dealing %d %s damage"):format(dam, self.elem[3] ) @@ -137,3 +137,40 @@ newEntity{ tactical = {ATTACK = 1}} ), } + +-- gfx +newEntity{ + name = " of shielding", addon=true, instant_resolve=true, + keywords = {shielding=true}, + level_range = {1, 50}, + rarity = 8, + + charm_power_def = {add=50, max=500, floor=true}, + resolvers.charm( + function(self, who) + local shield = self.use_power.shield(self, who) + return ("create a shield absorbing up to %d damage on yourself and all friendly characters within 10 spaces for %d turns"): + format(shield, 4) end, + 20, + function(self, who) + local tg = self.use_power.target(self, who) + local shield = who:spellCrit(self.use_power.shield(self, who)) + game.logSeen(who, "%s activates %s %s!", who.name:capitalize(), who:his_her(), self:getName{no_add_name = true, do_color = true}) + who:project(tg, who.x, who.y, function(px, py) + local target = game.level.map(px, py, engine.Map.ACTOR) + if not target then return end + if target:reactionToward(who) < 0 then return end + target:setEffect(target.EFF_DAMAGE_SHIELD, 4, {power=shield}) + + --game:playSoundNear(who, "talents/heal") + end) + return {id=true, used=true} + end, + "T_GLOBAL_CD", + { + radius = function(self, who) return 10 end, + shield = function(self, who) return self:getCharmPower(who) end, + target = function(self, who) return {type="ball", nowarning=true, radius=self.use_power.radius(self, who)} end, + tactical = {HEAL = 1}, + }) +} \ No newline at end of file diff --git a/game/modules/tome/data/timed_effects/mental.lua b/game/modules/tome/data/timed_effects/mental.lua index c0816f9786..dd8d9428a9 100644 --- a/game/modules/tome/data/timed_effects/mental.lua +++ b/game/modules/tome/data/timed_effects/mental.lua @@ -2377,6 +2377,11 @@ newEffect{ [DamageType.DARKNESS] = eff.power, }) eff.what = "lightning, blight, mind, darkness" + elseif eff.kind == "all" then + eff.sid = self:addTemporaryValue("flat_damage_armor", { + all = eff.power, + }) + eff.what = "all" end end, deactivate = function(self, eff) diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua index c73a1e1470..4fcf3ba97a 100644 --- a/game/modules/tome/data/timed_effects/other.lua +++ b/game/modules/tome/data/timed_effects/other.lua @@ -74,6 +74,21 @@ newEffect{ end, } +newEffect{ + name = "ITEM_CHARM_POWERFUL", image = "talents/intricate_tools.png", + desc = "Charm: Damage", + long_desc = function(self, eff) return ("All damage increased by %d%%."):format(eff.damage) end, + type = "other", + subtype = { }, + status = "beneficial", + parameters = { damage=10 }, + activate = function(self, eff) + self:effectTemporaryValue(eff, "inc_damage", {all = eff.damage}) + end, + deactivate = function(self, eff) + end, +} + newEffect{ name = "ITEM_CHARM_SAVIOR", image = "talents/intricate_tools.png", desc = "Charm: Saves", -- GitLab