From 943e4b2d5eb5e835d0c5175fc8563dbed987e80b Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Mon, 24 Mar 2014 12:36:52 +0100 Subject: [PATCH] Combat Accuracy now uses a non linear scaling, like most other talents Reduced Intuitive Shots power Many ego items changes & updates Changed Insane scaling to be closer to Nightmare talent scaling, the same rare scaling as Madness, and a 20% HP bonus. Marked all the forced starting areas that aren't optional as having no rare spawn. --- game/engines/default/engine/Shader.lua | 4 +-- game/modules/tome/class/Game.lua | 4 +-- game/modules/tome/class/NPC.lua | 11 +++++++- game/modules/tome/data/birth/descriptors.lua | 4 +++ game/modules/tome/data/damage_types.lua | 2 +- .../tome/data/general/objects/egos/ammo.lua | 14 +--------- .../tome/data/general/objects/egos/gloves.lua | 14 +++++----- .../tome/data/general/objects/egos/helm.lua | 1 + .../tome/data/general/objects/egos/rings.lua | 16 ----------- .../tome/data/talents/celestial/radiance.lua | 27 ++++++++++--------- .../tome/data/talents/celestial/sun.lua | 6 ++++- .../talents/techniques/combat-training.lua | 3 ++- .../data/talents/techniques/excellence.lua | 2 +- .../tome/data/timed_effects/mental.lua | 6 ++--- .../tome/data/zones/murgol-lair/zone.lua | 1 + .../tome/data/zones/ritch-tunnels/zone.lua | 1 + .../tome/data/zones/slazish-fen/zone.lua | 1 + 17 files changed, 56 insertions(+), 61 deletions(-) diff --git a/game/engines/default/engine/Shader.lua b/game/engines/default/engine/Shader.lua index 8755d53f8b..3d9ff0499a 100644 --- a/game/engines/default/engine/Shader.lua +++ b/game/engines/default/engine/Shader.lua @@ -150,10 +150,10 @@ end function _M:loaded() if _M.progsperm[self.totalname] then - print("[SHADER] using permcached shader "..self.totalname) + -- print("[SHADER] using permcached shader "..self.totalname) self.shad = _M.progsperm[self.totalname] elseif _M.progs[self.totalname] and not _M.progsreset[self.totalname] then - print("[SHADER] using cached shader "..self.totalname) + -- print("[SHADER] using cached shader "..self.totalname) self.shad = _M.progs[self.totalname].shad _M.progs[self.totalname].dieat = os.time() + 60 else diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index c6e2337a50..e53bacc4d4 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -344,8 +344,8 @@ function _M:loaded() elseif self.difficulty == self.DIFFICULTY_INSANE then zone.base_level_range = table.clone(zone.level_range, true) zone.specific_base_level.object = -10 -zone.level_range[1] - zone.level_range[1] = zone.level_range[1] * 2.2 + 5 - zone.level_range[2] = zone.level_range[2] * 2.2 + 5 + zone.level_range[1] = zone.level_range[1] * 1.7 + 5 + zone.level_range[2] = zone.level_range[2] * 1.7 + 5 elseif self.difficulty == self.DIFFICULTY_MADNESS then zone.base_level_range = table.clone(zone.level_range, true) zone.specific_base_level.object = -10 -zone.level_range[1] diff --git a/game/modules/tome/class/NPC.lua b/game/modules/tome/class/NPC.lua index ce9c9b563c..3edbc0fe77 100644 --- a/game/modules/tome/class/NPC.lua +++ b/game/modules/tome/class/NPC.lua @@ -433,8 +433,9 @@ function _M:addedToLevel(level, x, y) elseif game.difficulty == game.DIFFICULTY_INSANE and not game.party:hasMember(self) then -- Increase talent level for tid, lev in pairs(self.talents) do - self:learnTalent(tid, true, lev) + self:learnTalent(tid, true, lev / 2) end + -- Give unrand bosses extra classes if not self.randboss and self.rank >= 3.5 then local data = {} if self.rank == 3.5 then data = {nb_classes=1} @@ -446,6 +447,12 @@ function _M:addedToLevel(level, x, y) data.forbid_equip = true game.state:applyRandomClass(self, data, true) end + -- Increase life + local lifeadd = self.max_life * 0.2 + self.max_life = self.max_life + lifeadd + self.life = self.life + lifeadd + -- print("Insane increasing " .. self.name .. " life by " .. lifeadd) + self:attr("difficulty_boosted", 1) elseif game.difficulty == game.DIFFICULTY_MADNESS and not game.party:hasMember(self) then -- Increase talent level @@ -463,9 +470,11 @@ function _M:addedToLevel(level, x, y) data.forbid_equip = true game.state:applyRandomClass(self, data, true) end + -- Increase life local lifeadd = self.max_life * self:getRankLifeAdjust(1) * self.level / 65 / 1.5 self.max_life = self.max_life + lifeadd self.life = self.life + lifeadd + self:attr("difficulty_boosted", 1) end end diff --git a/game/modules/tome/data/birth/descriptors.lua b/game/modules/tome/data/birth/descriptors.lua index 23e92c392b..1467261ca1 100644 --- a/game/modules/tome/data/birth/descriptors.lua +++ b/game/modules/tome/data/birth/descriptors.lua @@ -227,6 +227,10 @@ newBirthDescriptor{ __game_difficulty = 4, rank = 2, }, + game_state = { + default_random_rare_chance = 3, + default_random_boss_chance = 20, + }, } newBirthDescriptor{ type = "difficulty", diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index f5f3b922ca..6b5dff5d60 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -1643,7 +1643,7 @@ newDamageType{ local target = game.level.map(x, y, Map.ACTOR) if target and rng.percent(dam.dam) then if target:canBe("blind") then - target:setEffect(target.EFF_BLINDED, 4, {apply_power=(dam.power_check or src.combatSpellpower)(src), no_ct_effect=true}) + target:setEffect(target.EFF_BLINDED, 4, {apply_power=(dam.power_check or math.max(src:combatSpellpower(), src:combatPhysicalpower())), no_ct_effect=true}) else game.logSeen(target, "%s resists!", target.name:capitalize()) end diff --git a/game/modules/tome/data/general/objects/egos/ammo.lua b/game/modules/tome/data/general/objects/egos/ammo.lua index b0027c5977..f7f04659d3 100644 --- a/game/modules/tome/data/general/objects/egos/ammo.lua +++ b/game/modules/tome/data/general/objects/egos/ammo.lua @@ -420,19 +420,6 @@ newEntity{ }, } -newEntity{ - power_source = {nature=true}, - name = "huntsman's ", prefix=true, instant_resolve=true, - keywords = {hunt=true}, - level_range = {1, 50}, - rarity = 10, - cost = 20, - combat = { - ranged_project={[DamageType.NATURE] = resolvers.mbonus_material(15, 5)}, - inc_damage_type = {animal=resolvers.mbonus_material(25, 5)}, - }, -} - newEntity{ power_source = {nature=true}, name = "insidious ", prefix=true, instant_resolve=true, @@ -710,6 +697,7 @@ newEntity{ combat = { ranged_project={[DamageType.DARKNESS] = resolvers.mbonus_material(15, 5)}, inc_damage_type = {humanoid=resolvers.mbonus_material(25, 5)}, + inc_damage_type = {animal=resolvers.mbonus_material(25, 5)}, }, } diff --git a/game/modules/tome/data/general/objects/egos/gloves.lua b/game/modules/tome/data/general/objects/egos/gloves.lua index 972b990af8..e2492b7625 100644 --- a/game/modules/tome/data/general/objects/egos/gloves.lua +++ b/game/modules/tome/data/general/objects/egos/gloves.lua @@ -85,8 +85,7 @@ newEntity{ resists = { [DamageType.COLD] = resolvers.mbonus_material(5, 5), }, melee_project= { [DamageType.COLD] = resolvers.mbonus_material(10, 5) }, combat = { - burst_on_crit= { [DamageType.COLD] = resolvers.mbonus_material(10, 5) }, - convert_damage = { [DamageType.COLD] = resolvers.mbonus_material(25, 25) }, + burst_on_crit= { [DamageType.ICE] = resolvers.mbonus_material(10, 5) }, talent_on_hit = { [Talents.T_ICE_BREATH] = {level=resolvers.genericlast(function(e) return e.material_level end), chance=10} }, }, }, @@ -159,7 +158,6 @@ newEntity{ melee_project= { [DamageType.BLIGHT] = resolvers.mbonus_material(10, 5) }, combat = { burst_on_crit= { [DamageType.BLIGHT] = resolvers.mbonus_material(10, 5) }, - convert_damage = { [DamageType.BLIGHT] = resolvers.mbonus_material(25, 25) }, talent_on_hit = { [Talents.T_SOUL_ROT] = {level=resolvers.genericlast(function(e) return e.material_level end), chance=20} }, }, }, @@ -340,7 +338,7 @@ newEntity{ }, disarm_bonus = resolvers.mbonus_material(25, 5), combat = { - talent_on_hit = { [Talents.T_MAIM] = {level=resolvers.genericlast(function(e) return e.material_level end), chance=20} }, + talent_on_hit = { [Talents.T_DISARM] = {level=resolvers.genericlast(function(e) return e.material_level end), chance=10} }, }, }, } @@ -498,10 +496,10 @@ newEntity{ }, infravision = resolvers.mbonus_material(1, 1), combat = { - talent_on_hit = { [Talents.T_CIRCLE_OF_BLAZING_LIGHT] = {level=resolvers.genericlast(function(e) return e.material_level end), chance=10} }, - melee_project={ - [DamageType.LIGHT] = resolvers.mbonus_material(10, 2), - [DamageType.DARKNESS] = resolvers.mbonus_material(10, 2), + burst_on_crit={ + -- still an AoE effect, but not a weak one with poor stat scaling that wastes the proc registry + [DamageType.LIGHT] = resolvers.mbonus_material(40, 10), + [DamageType.DARKNESS] = resolvers.mbonus_material(40, 10), }, }, }, diff --git a/game/modules/tome/data/general/objects/egos/helm.lua b/game/modules/tome/data/general/objects/egos/helm.lua index abe4dd10cc..084f7f4162 100644 --- a/game/modules/tome/data/general/objects/egos/helm.lua +++ b/game/modules/tome/data/general/objects/egos/helm.lua @@ -348,6 +348,7 @@ newEntity{ [DamageType.MIND] = resolvers.mbonus_material(15, 10), }, combat_mentalresist = resolvers.mbonus_material(20, 10), + confusion_immune = resolvers.mbonus_material(30, 20, function(e, v) v=v/100 return 0, v end), }, } diff --git a/game/modules/tome/data/general/objects/egos/rings.lua b/game/modules/tome/data/general/objects/egos/rings.lua index f2198c8c04..b240dc35f4 100644 --- a/game/modules/tome/data/general/objects/egos/rings.lua +++ b/game/modules/tome/data/general/objects/egos/rings.lua @@ -552,22 +552,6 @@ newEntity{ }, } -newEntity{ - power_source = {technique=true}, - name = " of focus", suffix=true, instant_resolve=true, - keywords = {focus=true}, - level_range = {40, 50}, - greater_ego = 1, - rarity = 30, - cost = 100, - resolvers.charmt(Talents.T_GREATER_WEAPON_FOCUS, {2,3,4}, 20), - wielder = { - resists_pen = { - [DamageType.PHYSICAL] = resolvers.mbonus_material(10, 5), - }, - }, -} - newEntity{ power_source = {technique=true}, name = " of pilfering", suffix=true, instant_resolve=true, diff --git a/game/modules/tome/data/talents/celestial/radiance.lua b/game/modules/tome/data/talents/celestial/radiance.lua index 9284ff378a..8e3937330a 100644 --- a/game/modules/tome/data/talents/celestial/radiance.lua +++ b/game/modules/tome/data/talents/celestial/radiance.lua @@ -54,20 +54,22 @@ newTalent{ local radius = radianceRadius(self) local grids = core.fov.circle_grids(self.x, self.y, radius, true) for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then - target:setEffect(target.EFF_ILLUMINATION, 1, {power=t.getPower(self, t), def=t.getDef(self, t)}) - local ss = self:isTalentActive(self.T_SEARING_SIGHT) - if ss then - local dist = core.fov.distance(self.x, self.y, target.x, target.y) - 1 - local coeff = math.scale(radius - dist, 1, radius, 0.1, 1) - local realdam = DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, ss.dam * coeff) - if ss.daze and rng.percent(ss.daze) and target:canBe("stun") then - target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()}) - end + if (self:reactionToward(target) < 0) then + target:setEffect(target.EFF_ILLUMINATION, 1, {power=t.getPower(self, t), def=t.getDef(self, t)}) + local ss = self:isTalentActive(self.T_SEARING_SIGHT) + if ss then + local dist = core.fov.distance(self.x, self.y, target.x, target.y) - 1 + local coeff = math.scale(radius - dist, 1, radius, 0.1, 1) + local realdam = DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, ss.dam * coeff) + if ss.daze and rng.percent(ss.daze) and target:canBe("stun") then + target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()}) + end - if realdam and realdam > 0 and self:hasEffect(self.EFF_LIGHT_BURST) then - self:setEffect(self.EFF_LIGHT_BURST_SPEED, 4, {}) + if realdam and realdam > 0 and self:hasEffect(self.EFF_LIGHT_BURST) then + self:setEffect(self.EFF_LIGHT_BURST_SPEED, 4, {}) + end end - end + end end end end end, info = function(self, t) @@ -97,6 +99,7 @@ newTalent{ return {dam=t.getDamage(self, t), daze=daze} end, deactivate = function(self, t, p) + return true end, info = function(self, t) return ([[Your Radiance is so powerful it burns all foes caught in it, doing up to %0.2f light damage (reduced with distance) to all foes caught inside. diff --git a/game/modules/tome/data/talents/celestial/sun.lua b/game/modules/tome/data/talents/celestial/sun.lua index 5013eb8768..ec9584b5a9 100644 --- a/game/modules/tome/data/talents/celestial/sun.lua +++ b/game/modules/tome/data/talents/celestial/sun.lua @@ -47,7 +47,11 @@ newTalent{ local _ _, x, y = self:canProject(tg, x, y) self:project({type="ball", x=x, y=y, radius=1, selffire=false}, x, y, DamageType.BLIND, t.getDuration(self, t), {type="light"}) end - self:removeEffect(self.EFF_SUN_VENGEANCE) + + -- Delay removal of the effect so its still there when no_energy checks + game:onTickEnd(function() + self:removeEffect(self.EFF_SUN_VENGEANCE) + end) game:playSoundNear(self, "talents/flame") return true diff --git a/game/modules/tome/data/talents/techniques/combat-training.lua b/game/modules/tome/data/talents/techniques/combat-training.lua index d45993ff3d..e50c9f6a66 100644 --- a/game/modules/tome/data/talents/techniques/combat-training.lua +++ b/game/modules/tome/data/talents/techniques/combat-training.lua @@ -108,7 +108,8 @@ newTalent{ levelup_screen_break_line = true, require = { level=function(level) return (level - 1) * 4 end }, mode = "passive", - getAttack = function(self, t) return self:getTalentLevel(t) * 10 end, + --getAttack = function(self, t) return self:getTalentLevel(t) * 10 end, + getAttack = function(self, t) return self:combatTalentScale(t, 10, 50) end, -- match values at 1 and 5 for old formula info = function(self, t) local attack = t.getAttack(self, t) return ([[Increases the accuracy of unarmed, melee and ranged weapons by %d.]]): diff --git a/game/modules/tome/data/talents/techniques/excellence.lua b/game/modules/tome/data/talents/techniques/excellence.lua index efd45bb71a..ce224a253c 100644 --- a/game/modules/tome/data/talents/techniques/excellence.lua +++ b/game/modules/tome/data/talents/techniques/excellence.lua @@ -143,7 +143,7 @@ newTalent{ require = techs_dex_req_high3, tactical = { BUFF = 2 }, getDist = function(self, t) return math.floor(self:combatTalentLimit(t, 11, 1, 3)) end, -- Limit <=10 - getChance = function(self, t) return math.floor(self:combatTalentLimit(t, 100, 20, 50)) end, + getChance = function(self, t) return math.floor(self:combatTalentLimit(t, 50, 5, 40)) end, archery_onhit = function(self, t, target, x, y) if not target or not target:canBe("knockback") then return end target:knockback(self.x, self.y, t.getDist(self, t)) diff --git a/game/modules/tome/data/timed_effects/mental.lua b/game/modules/tome/data/timed_effects/mental.lua index 843bb1a581..bf7e829369 100644 --- a/game/modules/tome/data/timed_effects/mental.lua +++ b/game/modules/tome/data/timed_effects/mental.lua @@ -192,9 +192,9 @@ newEffect{ on_gain = function(self, err) return "#Target#'s will is shattered.", "+Battle Cry" end, on_lose = function(self, err) return "#Target# regains some of its will.", "-Battle Cry" end, activate = function(self, eff) - self:effectTemporaryValue("combat_def", -eff.power) - self:effectTemporaryValue("no_evasion", 1) - self:effectTemporaryValue("blind_fighted", 1) + self:effectTemporaryValue(eff, "combat_def", -eff.power) + self:effectTemporaryValue(eff, "no_evasion", 1) + self:effectTemporaryValue(eff, "blind_fighted", 1) end, } diff --git a/game/modules/tome/data/zones/murgol-lair/zone.lua b/game/modules/tome/data/zones/murgol-lair/zone.lua index 23b569e9bd..3c620a0f34 100644 --- a/game/modules/tome/data/zones/murgol-lair/zone.lua +++ b/game/modules/tome/data/zones/murgol-lair/zone.lua @@ -54,6 +54,7 @@ return { nb_npc = {20, 30}, filters = { {max_ood=2}, }, guardian = is_invaded and "NASHVA" or "MURGOL", + randelite = 0, }, object = { class = "engine.generator.object.Random", diff --git a/game/modules/tome/data/zones/ritch-tunnels/zone.lua b/game/modules/tome/data/zones/ritch-tunnels/zone.lua index 2e4fc80c4d..317cade552 100644 --- a/game/modules/tome/data/zones/ritch-tunnels/zone.lua +++ b/game/modules/tome/data/zones/ritch-tunnels/zone.lua @@ -50,6 +50,7 @@ return { class = "mod.class.generator.actor.Random", nb_npc = {20, 30}, filters = { {max_ood=2}, }, + randelite = 0, guardian = "HIVE_MOTHER", }, object = { diff --git a/game/modules/tome/data/zones/slazish-fen/zone.lua b/game/modules/tome/data/zones/slazish-fen/zone.lua index a07d6856a0..44c751ce6e 100644 --- a/game/modules/tome/data/zones/slazish-fen/zone.lua +++ b/game/modules/tome/data/zones/slazish-fen/zone.lua @@ -59,6 +59,7 @@ return { class = "mod.class.generator.actor.Random", nb_npc = {7, 10}, filters = { {max_ood=2}, }, + randelite = 0, }, object = { class = "engine.generator.object.Random", -- GitLab