Skip to content
Snippets Groups Projects
Commit 51c389dc authored by dg's avatar dg
Browse files

Three new uniques added to Dreadfell (Borfast, Filio, and Aletta) that can...

Three new uniques added to Dreadfell (Borfast, Filio, and Aletta) that can randomly appear in he zone
Four new artifacts (Borfast's Cage, Aletta's Diadem, Hareskin Sling, and Withering Orbs)
Increased rarity of Boots of Spellbinding and Staff of Channeling
New Dreadfell Lore


git-svn-id: http://svn.net-core.org/repos/t-engine4@4829 51575b47-30f0-44d4-a5cc-537603b46e54
parent 0df3dd9d
No related branches found
No related tags found
No related merge requests found
Showing
with 716 additions and 9 deletions
......@@ -88,7 +88,9 @@ function _M:use(who, typ, inven, item)
local ret = self:useObject(who, inven, item)
if ret.used then
if self.use_sound then game:playSoundNear(who, self.use_sound) end
who:useEnergy(game.energy_to_act * (inven.use_speed or 1))
if not self.use_no_energy then
who:useEnergy(game.energy_to_act * (inven.use_speed or 1))
end
end
return ret
end
......@@ -711,6 +713,7 @@ function _M:getTextualDesc(compare_with)
end
compare_fields(w, compare_with, field, "combat_critical_power", "%+.2f%%", "Critical mult.: ")
compare_fields(w, compare_with, field, "combat_critreduction", "%-d%%", "Reduces opponents crit chance: ")
compare_fields(w, compare_with, field, "disarm_bonus", "%+d", "Trap disarming bonus: ")
compare_fields(w, compare_with, field, "inc_stealth", "%+d", "Stealth bonus: ")
......@@ -785,6 +788,10 @@ function _M:getTextualDesc(compare_with)
if w.undead then
desc:add("The wearer is treated as an undead.", true)
end
if w.blind_fight then
desc:add({"color", "YELLOW"}, "Blind-Fight:", {"color", "LAST"}, "This item allows the wearer to attack unseen targets without any penalties.", true)
end
if w.speaks_shertul then
desc:add("Allows you to speak and read the old Sher'Tul language.", true)
......
......@@ -1070,6 +1070,10 @@ function _M:physicalCrit(dam, weapon, target, atk, def)
if target:hasHeavyArmor() and target:knowTalent(target.T_ARMOUR_TRAINING) then
chance = chance - target:getTalentLevel(target.T_ARMOUR_TRAINING) * 1.9
end
if target:attr("combat_critreduction") then
chance = chance - target:attr("combat_critreduction")
end
if target:hasEffect(target.EFF_DISMAYED) then
chance = 100
......
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
-- last updated: 10:46 AM 2/3/2010
local Talents = require("engine.interface.ActorTalents")
newEntity{
define_as = "BASE_NPC_HORROR_TEMPORAL",
type = "horror", subtype = "temporal",
display = "h", color=colors.WHITE,
blood_color = colors.BLUE,
body = { INVEN = 10 },
autolevel = "warrior",
ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
stats = { str=20, dex=20, wil=20, mag=20, con=20, cun=20 },
combat_armor = 5, combat_def = 10,
combat = { dam=5, atk=10, apr=5, dammod={str=0.6} },
infravision = 10,
max_life = resolvers.rngavg(10,20),
rank = 2,
size_category = 3,
no_breath = 1,
fear_immune = 1,
}
-- temporal horrors
newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
dredge = 1,
name = "dredgling", color=colors.TAN,
desc = "A small pink-skinned humanoid with large bulbous eyes.",
level_range = {10, nil}, exp_worth = 1,
rarity = 1,
rank = 2,
size_category = 2,
autolevel = "warriormage",
max_life = resolvers.rngavg(50, 80),
combat_armor = 1, combat_def = 10,
combat = { dam=resolvers.levelup(resolvers.rngavg(15,20), 1, 1.1), atk=resolvers.rngavg(5,15), apr=5, dammod={str=1} },
resists = { [DamageType.TEMPORAL] = 25},
resolvers.talents{
[Talents.T_DUST_TO_DUST]={base=1, every=7, max=5},
},
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
subtype = "temporal",
dredge = 1,
name = "dredge", color=colors.PINK,
desc = "A hulking pink-skinned creature with long arms as thick as tree trunks. It drags its knuckles on the ground as it lumbers toward you.",
level_range = {15, nil}, exp_worth = 1,
rarity = 2,
rank = 2,
size_category = 4,
autolevel = "warrior",
max_life = resolvers.rngavg(120, 150),
life_rating = 16,
global_speed_base = 0.7,
combat_armor = 1, combat_def = 0,
combat = { dam=resolvers.levelup(resolvers.rngavg(25,150), 1, 1.2), atk=resolvers.rngavg(25,130), apr=1, dammod={str=1.1} },
resists = {all = 10, [DamageType.TEMPORAL] = 25, [DamageType.PHYSICAL] = 25},
resolvers.talents{
[Talents.T_STUN]={base=3, every=7, max=7},
[Talents.T_SPEED_SAP]={base=2, every=7, max=6},
[Talents.T_CLINCH]={base=2, every=6, max=8},
[Talents.T_CRUSHING_HOLD]={base=2, every=6, max=8},
},
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
subtype = "temporal",
dredge = 1,
name = "dredge captain", color=colors.SALMON,
desc = "A thin pink-skinned creature with long spindly arms. Half its body is old and wrinkly, and the other half appears quite young.",
level_range = {20, nil}, exp_worth = 1,
rarity = 5,
rank = 3,
size_category = 3,
max_life = resolvers.rngavg(60,80),
autolevel = "warriormage",
ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
combat_armor = 1, combat_def = 0,
resists = {all = 10, [DamageType.TEMPORAL] = 50},
make_escort = {
{type="horror", subtype="temporal", name="dredge", number=3, no_subescort=true},
},
resolvers.inscriptions(1, {"shielding rune"}),
resolvers.inscriptions(1, "infusion"),
resolvers.talents{
[Talents.T_DREDGE_FRENZY]={base=5, every=7, max=9},
[Talents.T_SPEED_SAP]={base=3, every=7, max=9},
},
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
subtype = "temporal",
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/horror_temporal_temporal_stalker.png", display_h=2, display_y=-1}}},
name = "temporal stalker", color=colors.STEEL_BLUE,
desc = "A slender metallic monstrosity with long claws in place of fingers, and razor-sharp teeth.",
level_range = {20, nil}, exp_worth = 1,
rarity = 3,
size_category = 3,
max_life = resolvers.rngavg(100,180),
life_rating = 12,
global_speed_base = 1.2,
autolevel = "rogue",
ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
combat_armor = 10, combat_def = 10,
combat = { dam=resolvers.levelup(resolvers.rngavg(25,100), 1, 1.2), atk=resolvers.rngavg(25,100), apr=25, dammod={dex=1.1} },
resists = {all = 10, [DamageType.TEMPORAL] = 50},
resolvers.talents{
[Talents.T_PERFECT_AIM]={base=3, every=7, max=5},
[Talents.T_SPIN_FATE]={base=5, every=7, max=8},
[Talents.T_STEALTH]={base=3, every=7, max=5},
[Talents.T_SHADOWSTRIKE]={base=3, every=7, max=5},
[Talents.T_UNSEEN_ACTIONS]={base=3, every=7, max=5},
},
resolvers.inscriptions(1, "rune"),
resolvers.inscriptions(1, "infusion"),
resolvers.sustains_at_birth(),
}
newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
subtype = "temporal",
name = "void horror", color=colors.GREY,
desc = "It looks like a hole in spacetime, but you get the impression it's somehow more than that.",
level_range = {20, nil}, exp_worth = 1,
rarity = 4,
rank = 2,
size_category = 2,
max_life = resolvers.rngavg(80, 120),
life_rating = 10,
autolevel = "summoner",
ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_snake" },
combat_armor = 1, combat_def = 10,
combat = { dam=resolvers.levelup(resolvers.mbonus(40, 15), 1, 1.2), atk=15, apr=15, dammod={wil=0.8}, damtype=DamageType.TEMPORAL },
on_melee_hit = { [DamageType.TEMPORAL] = resolvers.mbonus(20, 10), },
stun_immune = 1,
confusion_immune = 1,
silence_immune = 1,
resists = {[DamageType.TEMPORAL] = 50},
resolvers.talents{
[Talents.T_ENERGY_ABSORPTION]={base=3, every=7, max=5},
[Talents.T_ENERGY_DECOMPOSITION]={base=3, every=7, max=5},
[Talents.T_ENTROPIC_FIELD]={base=3, every=7, max=5},
[Talents.T_ECHOES_FROM_THE_VOID]={base=3, every=7, max=5},
[Talents.T_VOID_SHARDS]={base=2, every=7, max=5},
},
-- Random Anomaly on Death
on_die = function(self, who)
local ts = {}
for id, t in pairs(self.talents_def) do
if t.type[1] == "chronomancy/anomalies" then ts[#ts+1] = id end
end
self:forceUseTalent(rng.table(ts), {ignore_energy=true})
game.logSeen(self, "%s has collapsed in upon itself.", self.name:capitalize())
end,
resolvers.sustains_at_birth(),
}
......@@ -602,8 +602,7 @@ newEntity{ base = "BASE_AMULET",
type = "undead", subtype = "vampire",
display = "V", image = "npc/elder_vampire.png",
name = "elder vampire", color=colors.RED,
desc=[[A terrible robed undead figure, this creature has existed in its unlife for many centuries by stealing the life of others. It can
summon the very shades of its victims from beyond the grave to come enslaved to its aid.]],
desc=[[A terrible robed undead figure, this creature has existed in its unlife for many centuries by stealing the life of others. It can summon the very shades of its victims from beyond the grave to come enslaved to its aid.]],
combat = { dam=resolvers.rngavg(9,13), atk=10, apr=9, damtype=engine.DamageType.DRAINLIFE, dammod={str=1.9} },
......@@ -1090,3 +1089,118 @@ newEntity{ base = "BASE_BATTLEAXE",
},
},
}
newEntity{ base = "BASE_AMULET",
power_source = {nature=true},
define_as = "WITHERING_ORBS",
unique = true,
name = "Withering Orbs", color = colors.WHITE,
unided_name = "shadow-strung orbs",
desc = [[These opalescent orbs stare at you with deathly knowledge, undeceived by your vanities and pretences. They have lived and died through horrors you could never imagine, and now they lie strung in black chords watching every twitch of the shadows.
If you close your eyes a moment, you can almost imagine what dread sights they see...]],
level_range = {5, 12},
rarity = 20,
cost = 100,
material_level = 1,
metallic = false,
wielder = {
blind_fight = 1,
see_invisible = 10,
see_stealth = 10,
combat_mindpower = 5,
melee_project = {
[DamageType.MIND] = 5,
},
},
}
newEntity{ base = "BASE_MASSIVE_ARMOR",
power_source = {technique=true},
define_as = "BORFAST_CAGE",
unique = true,
name = "Borfast's Cage",
unided_name = "a suit of pitted and pocked plate-mail",
desc = [[Inch thick stralite plates lock together with voratun joints. The whole suit looks impenetrable, but has clearly been subjected to terrible treatment - great dents and misshaping warps, and caustic fissures bored across the surface.
Though clearly a powerful piece, it must once have been much greater.]],
color = colors.WHITE,
level_range = {20, 28},
rarity = 200,
require = { stat = { str=35 }, },
cost = 500,
material_level = 5,
wielder = {
combat_def = 10,
combat_armor = 15,
fatigue = 24,
inc_stats = { [Stats.STAT_CON] = 5, },
resists = {
[DamageType.ACID] = - 15,
[DamageType.PHYSICAL] = 15,
},
max_life = 50,
life_regen = 2,
knockback_immune = 0.3,
combat_physresist = 15,
combat_critreduction = 20,
},
}
newEntity{ base = "BASE_LEATHER_CAP", -- No armor training requirement
power_source = {nature=true},
define_as = "ALETTA_DIADEM",
name = "Aletta's Diadem", unique=true, unided_name="jeweled diadem",
desc = [[A filigree of silver set with many small jewels, this diadem seems radiant - ethereal almost. But its touch seems to freeze your skin and brings wild thoughts to your mind. You want to drop it, throw it away, and yet you cannot resist thinking of what powers it might bring you.
Is this temptation a weak will on your part, or some domination from the artifact itself...?]],
require = { stat = { wil=24 }, },
level_range = {20, 28},
rarity = 200,
cost = 1000,
material_level = 3,
metallic = true,
wielder = {
inc_stats = { [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 4, },
combat_mindpower = 12,
combat_mindcrit = 5,
on_melee_hit={ [DamageType.MIND] = 12, },
inc_damage={ [DamageType.MIND] = 10, },
},
max_power = 10, power_regen = 1,
use_talent = { id = Talents.T_PSYCHIC_LOBOTOMY, level=3, power = 8 },
}
newEntity{ base = "BASE_SLING",
power_source = {technique=true},
define_as = "HARESKIN_SLING",
name = "Hare-Skin Sling", unique=true, unided_name = "hare-skin sling",
desc = [[This well-tended sling is made from the leather and sinews of a large hare. It feels smooth to the touch yet very durable. Some say that the skin of a hare brings luck and fortune.
Hard to tell if that really helped its former owner, but it's clear that the skin is at least also strong and reliable..]],
level_range = {20, 28},
rarity = 200,
require = { stat = { dex=35 }, },
cost = 50,
material_level = 4,
use_no_energy = true,
combat = {
range = 10,
physspeed = 0.8,
},
basic_ammo = {
dam = 42,
apr = 3,
physcrit = 5,
dammod = {dex=0.7, cun=0.5},
},
wielder = {
movement_speed = 0.2,
inc_stats = { [Stats.STAT_LCK] = 10, },
combat_physcrit = 5,
combat_def = 10,
talents_types_mastery = { ["cunning/survival"] = 0.2, },
},
max_power = 8, power_regen = 1,
use_talent = { id = Talents.T_INERTIAL_SHOT, level=3, power = 8 },
}
......@@ -357,14 +357,14 @@ newEntity{
},
},
}
-- TODO: Make into an artifact effect and remove
newEntity{
power_source = {arcane=true},
name = " of spellbinding", suffix=true, instant_resolve=true,
keywords = {spellbinding=true},
level_range = {10, 50},
greater_ego = 1,
rarity = 15,
rarity = 35,
cost = 30,
max_power = 80, power_regen = 1,
use_talent = { id = Talents.T_METAFLOW, level = 2, power = 80 },
......
......@@ -275,13 +275,14 @@ newEntity{
use_talent = { id = Talents.T_DISPLACEMENT_SHIELD, level = 4, power = 80 },
}
-- TODO: Make into an artifact effect and remove
newEntity{
power_source = {arcane=true},
name = " of channeling", suffix=true, instant_resolve=true,
keywords = {channeling=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 18,
rarity = 38,
cost = 45,
wielder = {
combat_spellpower = resolvers.mbonus_material(12, 3),
......
......@@ -129,3 +129,46 @@ newLore{
image = "the_master_slain.png",
lore = [[A powerful staff is grabbed from the Master's dead hands.]],
}
newLore{
id = "dreadfell-borfast-letter",
category = "dreadfell",
name = "a letter to Borfast from the Master",
lore = [[Ah, my dear Borfast, welcome to your glorious undeath! Your armour a cage, your hopes despair, your axe enslaved to my will, your soul mine to feast upon. How does it feel? Rather lovely I like to imagine! You were a valiant opponent, and though you were little threat to me I do like to honour you with this special treatment. And you do like honour, don't you? I know you wished to honour your people by defeating me and destroying my tower, but I'm sure you realise now that it was a rather vain endeavour.
I apologise for what happened to that lovely suit of plate. I know it got a little... worn... during the treatment. But I'm afraid I really did need to find out the locations of your companion, and certain pressures had to be applied. You weren't very talkative, now were you? But I soon made you sing, oh yes. Of course, I could have just used a little divination magic to find out what I wanted, but I do so enjoy a good torture... And my, how joyous your screams were whenever the acid splashed against your beard! Hoh, we did chortle, did we not? But no matter, I've had my best skeletal smiths work on fixing your armour, fit to be worn by my new champion.
I hope you enjoy your new work. Approach it with gusto, that sort of thing. I know in life you always dreamed of being a mighty hero of legend. But, well, what can be more glorious than this? You will live forever as my servant, destined to defend my throne for all time! You will be the envy of all the lesser ghouls that shamble about my halls. Well, until you get slain by some dumb intruding adventurer, of course... But that's the beauty of you heroes - one comes in, makes a mess, and then I get a new plaything to toy with. I wonder who shall replace you, eh?
Until then, do enjoy the work, try to keep the place clean, and remember - I own you forever.
- The Master]],
}
newLore{
id = "dreadfell-aletta-letter",
category = "dreadfell",
name = "a letter to Aletta from the Master",
lore = [[Ah, sweet Aletta! How rich your blood tasted on my lips! I know it's not quite what you were expecting from the next step in our relationship, but aren't surprises the true joy of any romance?
I don't blame you for falling for me, you know, even to the point of betraying all your companions just for me. Women have always had a weakness for my brooding personality and sparkling wit. Even in life I was quite the charmer, and death only improves things, I assure you. I really do have the reputation as a heartbreaker, in more ways than one... Your heart shall now sit in a special place, next to the rest of the offal in my pits.
Thank you for telling me of Borfast's weaknesses - it shall make overcoming the dwarven grunt all the simpler. Your rogue friend remains more elusive, but he will be found and destroyed. You see I have a sort of persistent bloody-mindedness about this sort of thing. There is not a cockroach in this tower that does not obey my every whim and will, and I shall see to it that it remains that way.
You must feel a little betrayed of course. I promised you power beyond your imaginings, and instead I drained your blood, fed your flesh to my servants, and enthralled your soul to my bidding. Well, we all struggle to manage expectations sometimes, eh? At least be glad I let your tortured essence roam the cold fastness of my fortress, haunting anyone foolish enough to invade. And some power I will impart to you, and it is indeed beyond your imaginings, for your mind could never reach the dark places I can. But open your eyes now, for such dark places shall be with you till the end of time... Welcome, indeed, to the dark place of my heart.
- The Master]],
}
newLore{
id = "dreadfell-filio-letter",
category = "dreadfell",
name = "a letter to Filio from the Master",
lore = [[Oh Filio, what a fun game we have had of cat and mouse! Well, perhaps to you it was a life and death struggle, but for me this past three weeks of patiently hunting you through my halls has been the most entertaining of past-times. I have enjoyed extending the game so, letting you escape my clutches when I felt it most prudent, watching as you got ever more desperate. Alas, you have now degraded too much, and it was simply too embarrassing watching you eat your own faeces to survive. I had to put an end to it - I'm sure you understand.
But ah, it's not truly an end, for you get to experience the wonder of undead enslavement! Is it not most exciting? Do your bones not quiver with delight? It is just your bones now, since I have a certain fondness for skeletal servants, but I have been nice enough to pad your heels with leather so you can still sneak about quietly. How you did love to sneak! Now you may spend an eternity doing so, ensuring any future trespassers get quite the surprise wandering through my great keep.
I have let you keep your little sling, since I know you like to play with it. Such a quaint weapon... But this staff I found in your possession - my, what a treasure you have brought me! I do not know whence you stole this artifact, but you clearly were completely unaware of its value or power. It has a history beyond your very comprehension, and in my hands it shall change the future! Thank you kindly, my servant; already you have served your Master well. I'm sure we shall enjoy a great friendship over the many years to come. Well, not friendship exactly - it more involves eternal agony on your part, and a rise to ultimate power and majesty for me. Such is the fate of the weak and the strong, a lesson you have already learned well. What a great teacher I make...
- The Master]],
}
......@@ -28,10 +28,18 @@ newTalentType{ allow_random=true, type="psionic/finer-energy-manipulations", min
newTalentType{ allow_random=true, type="psionic/mental-discipline", generic = true, name = "mental discipline", description = "Increase mental capacity, endurance, and flexibility." }
newTalentType{ type="psionic/other", name = "other", description = "Various psionic talents." }
-- Advanced Talent Trees
newTalentType{ allow_random=true, type="psionic/grip", name = "grip", min_lev = 20, description = "Augment your telekinetic grip." }
newTalentType{ allow_random=true, type="psionic/psi-archery", name = "psi-archery", min_lev = 10, description = "Use your telekinetic powers to wield bows with deadly effectiveness." }
newTalentType{ allow_random=true, type="psionic/greater-psi-fighting", name = "greater psi-fighting", description = "Elevate psi-fighting prowess to epic levels." }
newTalentType{ allow_random=true, type="psionic/brainstorm", name = "brainstorm", description = "Focus your telekinetic powers in ways undreamed of by most mindslayers." }
-- Secret Project...
-- Solipsist Talent Trees
newTalentType{ allow_random=true, type="psionic/psychic-assault", name = "psychic assault", description = "Directly attack your opponents minds." }
-- Generic Solipsist Trees
-- Level 0 wil tree requirements:
psi_absorb = {
stat = { wil=function(level) return 12 + (level-1) * 8 end },
......@@ -157,3 +165,6 @@ load("/data/talents/psionic/other.lua")
load("/data/talents/psionic/psi-archery.lua")
load("/data/talents/psionic/grip.lua")
-- Solipsist
load("/data/talents/psionic/psychic-assault.lua")
\ No newline at end of file
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
newTalent{
name = "Psychic Lobotomy",
type = {"psionic/psychic-assault", 1},
points = 5,
cooldown = 6,
range = 10,
psi = 10,
direct_hit = true,
requires_target = true,
tactical = { ATTACK = { MIND = 2 }, DISABLE = { confusion = 2 } },
getDamage = function(self, t) return self:combatTalentMindDamage(t, 20, 250) end,
getCunningDamage = function(self, t) return self:combatTalentMindDamage(t, 10, 30) end,
getDuration = function(self, t) return math.floor(self:getTalentLevel(t)) end,
no_npc = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local _ _, x, y = self:canProject(tg, x, y)
if not x or not y then return nil end
local target = game.level.map(x, y, Map.ACTOR)
if not target then return nil end
local ai = target.ai or nil
self:project(tg, x, y, DamageType.MIND, {dam=self:mindCrit(t.getDamage(self, t))})
if target:canBe("confused") then
target:setEffect(target.EFF_LOBOTOMIZED, t.getDuration(self, t), {src = self, ai=target.ai, power=t.getCunningDamage(self, t), apply_power=self:combatMindpower()})
else
game.logSeen(target, "%s resists the lobotomy!", target.name:capitalize())
end
return true
end,
info = function(self, t)
local damage = t.getDamage(self, t)
local cunning_damage = t.getCunningDamage(self, t)
local duration = t.getDuration(self, t)
return ([[Inflicts %0.2f mind damage and cripples the target's higher mental functions, reducing cunning by %d and preventing the target from making tactical decisions for %d turns.
The damage and cunning penalty will scale with your Mindpower.]]):
format(damDesc(self, DamageType.MIND, (damage)), cunning_damage, duration)
end,
}
-- Idea, Brain Rupture
\ No newline at end of file
......@@ -2122,3 +2122,23 @@ newEffect{
self:removeTemporaryValue("wild_summon", eff.tid)
end,
}
newEffect{
name = "LOBOTOMIZED", image = "talents/psychic_lobotomy.png",
desc = "Lobotomized",
long_desc = function(self, eff) return ("The target's mental faculties have been impaired, reducing it's cunning by %d and preventing it from making tactical decisions."):format(eff.power) end,
type = "mental",
subtype = { confusion=true },
status = "detrimental",
on_gain = function(self, err) return "#Target# higher mental functions have been imparied.", "+Lobotomized" end,
on_lose = function(self, err) return "#Target#'s regains it's senses.", "-Lobotomized" end,
parameters = { },
activate = function(self, eff)
eff.cid = self:addTemporaryValue("inc_stats", {[Stats.STAT_CUN]=-eff.power})
if self.ai then self.ai="dumb_talented_simple" end
end,
deactivate = function(self, eff)
self:removeTemporaryValue("inc_stats", eff.cid)
if self.ai then self.ai=eff.ai end
end,
}
......@@ -189,3 +189,222 @@ newEntity{ define_as = "PALE_DRAKE",
resolvers.inscriptions(4, "rune"),
resolvers.inscriptions(1, {"manasurge rune"}),
}
-- Dreadfell uniques
newEntity{ define_as = "BORFAST",
allow_infinite_dungeon = true,
faction = "dreadfell",
type = "undead", subtype = "ghoul", unique = true,
name = "Borfast the Broken",
display = "g", color=colors.VIOLET,
desc = [[Thick skin hangs loosely from this short, shambling form. Tufts of hair sticking out from its chin give evidence of a once magnificent dwarven beard. Half its face seems to have been seared in acid at some point, the flesh melted away from the skull and an eyeball drooping low from its socket. There is a unique sadness to its eyes, and a slump of resignation to its gait.
What proud hero of renown was this before he was condemned to such a terrible fate?]],
killer_message = "and offered to his dark Master",
level_range = {20, nil}, exp_worth = 2,
max_life = 350, life_rating = 19, fixed_rating = true,
max_stamina = 200,
rank = 3.5,
rarity = 50,
size_category = 3,
infravision = 10,
stats = { str=30, dex=20, con=30 },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1, HANDS=1, FEET=1, },
equipment = resolvers.equip{
{type="weapon", subtype="mace", ego_chance=100, autoreq=true, force_drop=true,},
{type="armor", subtype="shield", ego_chance=100, autoreq=true, force_drop=true,},
{type="armor", subtype="massive", defined="BORFAST_CAGE", random_art_replace={chance=75}, autoreq=true, tome_drops="boss"},
{type="armor", subtype="head", ego_chance=75, autoreq=true},
{type="armor", subtype="hands", ego_chance=75, autoreq=true},
{type="armor", subtype="feet", ego_chance=75, autoreq=true},
},
resolvers.drops{chance=100, nb=1, {tome_drops="boss"} },
resolvers.drops{chance=100, nb=1, {defined="BORFAST_LETTER"} },
instakill_immune = 1,
undead = 1,
poison_immune = 0.8,
cut_immune = 1,
stun_immune = 0.5,
fear_immune = 1,
global_speed_base = 0.8,
resolvers.talents{
[Talents.T_SHIELD_PUMMEL]={base=5, every=5, max=6},
[Talents.T_ASSAULT]={base=1, every=5, max=6},
[Talents.T_RUSH]={base=1, every=5, max=6},
[Talents.T_SPELL_SHIELD]={base=3, every=5, max=6},
[Talents.T_PERFECT_STRIKE]={base=3, every=5, max=6},
[Talents.T_SHIELD_WALL]=6,
[Talents.T_SHIELD_EXPERTISE]=6,
[Talents.T_THICK_SKIN]={base=3, every=5, max=5},
[Talents.T_ARMOUR_TRAINING]={base=4, every=5, max=10},
[Talents.T_WEAPONS_MASTERY]={base=4, every=5, max=10},
[Talents.T_WEAPON_COMBAT]={base=4, every=5, max=10},
[Talents.T_VITALITY]={base=4, every=5, max=6},
[Talents.T_UNFLINCHING_RESOLVE]=6,
[Talents.T_DAUNTING_PRESENCE]={base=3, every=5, max=5},
[Talents.T_GHOULISH_LEAP]={base=1, every=5, max=5},
[Talents.T_RETCH]=5,
[Talents.T_GNAW]=1,
},
resolvers.sustains_at_birth(),
autolevel = "tank",
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
ai_tactic = resolvers.tactic"tank",
resolvers.inscriptions(1, {"shielding rune",}),
}
newEntity{ define_as = "ALETTA",
allow_infinite_dungeon = true,
faction = "dreadfell",
type = "undead", subtype = "ghost", unique = true,
name = "Aletta Soultorn",
display = "G", color=colors.VIOLET,
desc = [[What once must have been an enchantingly beautiful Higher woman now looks to be a ghost of utter despair. Her thin, elegant form ripples gently in the air, whilst her tattered robes seem oddly still. The ghost's face looks jittery and pained whilst her wild, glowing eyes move rapidly back and forth in their sockets.
Now and then she seems to see something and her jaw pulls back, her whole face splitting apart as she shrieks an unholy cry of pain and torment.]],
killer_message = "and offered to her dark Master",
level_range = {20, nil}, exp_worth = 2,
max_life = 150, life_rating = 10, fixed_rating = true,
hate_regen = 1,
rank = 3.5,
rarity = 50,
size_category = 3,
infravision = 10,
stats = { str=14, dex=18, mag=20, wil=20, cun=20, con=12 },
instakill_immune = 1,
no_breath = 1,
stone_immune = 1,
confusion_immune = 1,
fear_immune = 1,
teleport_immune = 0.5,
disease_immune = 1,
poison_immune = 1,
stun_immune = 1,
blind_immune = 1,
cut_immune = 1,
see_invisible = 80,
undead = 1,
combat_armor = 0, combat_def = 10,
stealth = 20,
combat = { dam=5, atk=5, apr=100, dammod={str=0.5, mag=0.5} },
can_pass = {pass_wall=70},
dont_pass_target = true,
resists = {all = 35, [DamageType.LIGHT] = -70, [DamageType.DARKNESS] = 65},
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, NECK=1, FINGER = 2, BODY=1, HEAD=1, },
equipment = resolvers.equip{
{type="armor", subtype="cloth", ego_chance=75, autoreq=true,},
{type="armor", subtype="head", defined="ALETTA_DIADEM", random_art_replace={chance=75}, autoreq=true, tome_drops="boss"},
{type="jewelry", subtype="amulet", ego_chance=100, autoreq=true, force_drop=true},
{type="jewelry", subtype="ring", ego_chance=100, autoreq=true, force_drop=true},
{type="jewelry", subtype="ring", ego_chance=75, autoreq=true},
},
resolvers.drops{chance=100, nb=1, {tome_drops="boss"} },
resolvers.drops{chance=100, nb=1, {defined="ALETTA_LETTER"} },
resolvers.talents{
[Talents.T_SHRIEK]=4,
[Talents.T_SILENCE]={base=2, every=10, max=5},
[Talents.T_MIND_DISRUPTION]={base=3, every=7, max=6},
[Talents.T_RUINED_EARTH]={base=3, every=7, max=5},
[Talents.T_GLOOM]={base=3, every=7, max=5},
[Talents.T_WEAKNESS]={base=3, every=7, max=5},
[Talents.T_SANCTUARY]=5,
[Talents.T_INSTILL_FEAR]=5,
[Talents.T_HEIGHTEN_FEAR]=5,
[Talents.T_TYRANT]=5,
-- [Talents.T_PANIC]=5, -- Doesn't work on players so commented out for now
},
resolvers.sustains_at_birth(),
autolevel = "wildcaster",
ai = "tactical", ai_state = { ai_target="target_player_radius", sense_radius=40, talent_in=1, },
ai_tactic = resolvers.tactic"ranged",
}
newEntity{ define_as = "FILIO",
allow_infinite_dungeon = true,
faction = "dreadfell",
type = "undead", subtype = "skeleton", unique = true,
name = "Filio Flightfond",
display = "s", color=colors.VIOLET,
desc = [[A short, furtive-looking skeleton with padded feet. He moves quickly and silently, and seems to meld into the shadows with ease. In one hand he holds a sling, and the other a short dagger.
There is a cunning air to his hollow skull, and his empty sockets reveal nothing of what tricks and tactics he has planned.]],
killer_message = "and offered to his dark Master",
level_range = {20, nil}, exp_worth = 2,
max_life = 250, life_rating = 15, fixed_rating = true,
max_stamina = 200,
rank = 3.5,
rarity = 50,
size_category = 3,
infravision = 10,
stats = { str=20, dex=20, cun=10, wil=40 },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, QUIVER=1 },
equipment = resolvers.equip{
{type="weapon", subtype="sling", defined="HARESKIN_SLING", random_art_replace={chance=0}, autoreq=true, tome_drops="boss"},
{type="weapon", subtype="dagger", ego_chance=100, autoreq=true, force_drop=true},
},
resolvers.drops{chance=100, nb=1, {tome_drops="boss"} },
resolvers.drops{chance=100, nb=1, {defined="FILIO_LETTER"} },
open_door = 1,
instakill_immune = 1,
cut_immune = 1,
blind_immune = 1,
fear_immune = 1,
poison_immune = 1,
undead = 1,
resolvers.talents{
[Talents.T_SHOOT]=1,
[Talents.T_INERTIAL_SHOT]=3,
[Talents.T_STEALTH]={base=5, every=6, max=7},
[Talents.T_SHADOWSTRIKE]={base=1, every=6, max=7},
[Talents.T_HIDE_IN_PLAIN_SIGHT]={base=1, every=6, max=7},
[Talents.T_DISENGAGE]={base=3, every=6, max=7},
[Talents.T_EVASION]={base=5, every=6, max=7},
[Talents.T_PIERCING_SIGHT]={base=3, every=6, max=7},
[Talents.T_DUAL_STRIKE]={base=2, every=6, max=7},
[Talents.T_DUAL_WEAPON_DEFENSE]={base=5, every=6, max=7},
[Talents.T_LETHALITY]={base=1, every=6, max=5},
[Talents.T_WILLFUL_COMBAT]={base=5, every=6, max=6},
[Talents.T_KNIFE_MASTERY]={base=4, every=5, max=10},
[Talents.T_WEAPON_COMBAT]={base=4, every=5, max=10},
[Talents.T_BONE_ARMOUR]={base=3, every=5, max=5},
[Talents.T_RESILIENT_BONES]={base=3, every=5, max=5},
[Talents.T_SKELETON_REASSEMBLE]={base=3, every=5, max=5},
},
resolvers.sustains_at_birth(),
autolevel = "slinger",
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
ai_tactic = resolvers.tactic"survivor",
resolvers.inscriptions(1, {"invisibility rune",}),
on_move = function(self, x, y, self, force)
if not force and rng.percent(10) then
local traps = { self.T_BEAR_TRAP, self.T_CATAPULT_TRAP }
self:forceUseTalent(rng.table(traps), {ignore_energy=true, ignore_resources=true, ignore_cd=true, force_target=self})
end
end,
}
......@@ -42,3 +42,27 @@ newEntity{ base = "BASE_LORE",
rarity = false,
encumberance = 0,
}
newEntity{ base = "BASE_LORE",
define_as = "BORFAST_LETTER",
name = "a letter from the Master", lore="dreadfell-borfast-letter",
desc = [[A letter written in a bold, commanding script]],
rarity = false,
encumberance = 0,
}
newEntity{ base = "BASE_LORE",
define_as = "ALETTA_LETTER",
name = "a letter from the Master", lore="dreadfell-aletta-letter",
desc = [[A letter written in a bold, commanding script]],
rarity = false,
encumberance = 0,
}
newEntity{ base = "BASE_LORE",
define_as = "FILIO_LETTER",
name = "a letter from the Master", lore="dreadfell-filio-letter",
desc = [[A letter written in a bold, commanding script]],
rarity = false,
encumberance = 0,
}
......@@ -56,7 +56,7 @@ newEntity{ base="BASE_NPC_CANINE", define_as = "WITHERING_THING",
combat = { dam=resolvers.levelup(8, 1, 0.9), atk=15, apr=3 },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
resolvers.drops{chance=100, nb=1, {unique=true, not_properties={"lore"}} },
resolvers.drops{chance=100, nb=1, {defined="WITHERING_ORBS", random_art_replace={chance=75}} },
resolvers.drops{chance=100, nb=3, {tome_drops="boss"} },
resolvers.talents{
......
......@@ -29,7 +29,7 @@ newEntity{ base = "BASE_LONGBOW",
rarity=false,
name = "Epoch's Curve", unided_name = "white ash longbow", unique=true, image="object/artifact/bow_epochs_curve.png",
desc = [[Epoch's Curve has served the Wardens for generations and was passed from Warden to Warden for many generations before being lost.
According to legend it was made from the first ash sapling to sprout after the Spellblaze and carries powers of both time and renewal.]],
According to legend it was made from the first ash sapling to sprout after the Spellblaze and carries powers of both time and renewal.]],
level_range = {20, 40},
rarity = 200,
require = { stat = { dex=24 }, },
......
......@@ -34,7 +34,8 @@ newEntity{ define_as = "SANDWORM_TUNNELER",
name = "sandworm burrower",
display = "w", color=colors.GREEN,
desc = [[This sandworm seems to not care about your presence at all and simply continues digging its way through the sand.
Maybe following it is the only way to move around here...]],
Maybe following it is the only way to move around here...]],
level_range = {12, 50}, exp_worth = 0,
max_life = 10000,
faction = "sandworm-burrowers",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment