Newer
Older
--
-- 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
local Stats = require "engine.interface.ActorStats"
local Talents = require "engine.interface.ActorTalents"
newEntity{ base = "BASE_GEM", define_as = "ANCIENT_STORM_SAPHIR",
power_source = {unknown=true},
unique = true,
unided_name = "strange sapphire",
name = "Ancient Storm Sapphire", subtype = "blue", image = "object/ancient_storm_saphir.png",
desc = [[This seemingly normal sapphire seems to be charged with the destructive power of a raging storm.]],
rarity = 300,
cost = 0,
material_level = 4,
identified = false,
}
-- Not a random drop, used by the quest started above
newEntity{ base = "BASE_SCROLL", define_as = "JEWELER_SUMMON", subtype="tome", no_unique_lore=true,
power_source = {unknown=true},
unique = true, quest=true, identified=true,
name = "Scroll of Summoning (Limmir the Jeweler)",
color = colors.VIOLET,
fire_proof = true,
max_power = 1, power_regen = 1,
use_power = { name = "summon Limmir the jeweler at the center of the lake of the moon", power = 1,
use = function(self, who) who:hasQuest("master-jeweler"):summon_limmir(who) return {id=true, used=true} end
power_source = {arcane=true},
name = "Pendant of the Sun and Moons", color = colors.LIGHT_SLATE, image = "object/artifact/amulet_pendant_of_sun_and_the_moon.png",
unided_name = "a gray and gold pendant",
desc = [[This small pendant depicts a hematite moon eclipsing a golden sun and according to legend was worn by one of the Sunwall's founders.]],
level_range = {35, 45},
rarity = 300,
cost = 200,
material_level = 4,
special_desc = function(self) return "All your damage is converted and split into light and darkness." end,
inc_damage = { [DamageType.LIGHT]= 8,[DamageType.DARKNESS]= 8 },
resists = { [DamageType.LIGHT]= 10, [DamageType.DARKNESS]= 10 },
resists_cap = { [DamageType.LIGHT]= 5, [DamageType.DARKNESS]= 5 },
resists_pen = { [DamageType.LIGHT]= 15, [DamageType.DARKNESS]= 15 },
use_talent = { id = Talents.T_CIRCLE_OF_SANCTITY, level = 3, power = 30 },
newEntity{ base = "BASE_SHIELD", define_as = "SHIELD_UNSETTING",
power_source = {arcane=true},
unique = true,
unided_name = "shimmering gold shield",
moddable_tile = "special/%s_unsetting_sun",
moddable_tile_big = true,
desc = [[When Elmio Panason, captain of the Vanguard, first sought shelter for his shipwrecked crew, he reflected the last rays of the setting sun off his shield. Where the beam hit they rested and built the settlement that would become the Sunwall. In the dark days that followed the shield became a symbol of hope for a better future.]],
color = colors.YELLOW,
rarity = 300,
level_range = {35, 45},
require = { stat = { str=40 }, },
cost = 400,
material_level = 5,
special_combat = {
block = 280,
dammod = {str=1},
damtype = DamageType.LIGHT,
},
wielder = {
lite = 2,
combat_def = 16,
combat_def_ranged = 17,
resists = {[DamageType.BLIGHT] = 30, [DamageType.DARKNESS] = 30},
learn_talent = { [Talents.T_BLOCK] = 5, },
HousePet
committed
set_desc = {
dawn = "Glows brightly in the light of dawn.",
},
on_set_complete = function(self, who)
self:specialSetAdd({"wielder","life_regen"}, 0.25)
self:specialSetAdd({"wielder","lite"}, 1)
end,
on_set_broken = function(self, who)
end,
}
newEntity{ base = "BASE_HEAVY_BOOTS",
power_source = {arcane=true},
unique = true,
name = "Scorched Boots", image = "object/artifact/scorched_boots.png",
unided_name = "pair of blackened boots",
desc = [[The master blood mage Ru'Khan was the first orc to experiment with the power of the Sher'Tul farportals in the Age of Pyre. However, that first experiment was not particularly successful, and after the explosion of energy all that could be found of Ru'Khan was a pair of scorched boots.]],
color = colors.DARK_GRAY,
level_range = {30, 40},
rarity = 250,
cost = 200,
wielder = {
combat_armor = 4,
combat_def = 4,
fatigue = 8,
combat_spellpower = 13,
combat_spellcrit = 6,
inc_damage = { [DamageType.BLIGHT] = 15, [DamageType.FIRE] = 15, [DamageType.DARKNESS] = 15 },
max_power = 40, power_regen = 1,
use_talent = { id = Talents.T_POISON_STORM, level = 3, power = 30 },
newEntity{ base = "BASE_GEM",
power_source = {arcane=true},
unique = true,
unided_name = "unearthly black stone",
name = "Goedalath Rock", subtype = "demonic", image = "object/artifact/goedalath_rock.png",
level_range = {42, 50},
desc = [[A small rock that seems from beyond this world, vibrating with a fierce energy. It feels warped and terrible and evil... and yet oh so powerful.]],
rarity = 300,
cost = 300,
material_level = 5,
auto_pickup = false, -- why would you do such a thing.
encumber = 0.1, -- at least they'll see it on transmo screen.
carrier = {
on_melee_hit = {[DamageType.HEAL] = 34},
life_regen = -2,
lite = -2,
combat_mentalresist = -18,
healing_factor = -0.5,
},
imbue_powers = {
combat_dam = 12,
combat_spellpower = 16,
see_invisible = 14,
infravision = 3,
inc_damage = {all = 9},
inc_damage_type = {demon = 20},
esp = {["demon/major"]=1, ["demon/minor"]=1},
on_melee_hit = {[DamageType.DARKNESS] = 34},
healing_factor = 0.5,
},
on_pickup = function(self, who)
if who == game.player then
who:runStop("evil touch")
who:restStop("evil touch")
end
end,
color_attributes = {damage_type = 'SHADOWFLAME',},}
newEntity{ base = "BASE_CLOAK",
unique = true,
name = "Threads of Fate", image = "object/artifact/cloak_threads_of_fate.png",
unided_name = "a shimmering white cloak",
desc = [[Untouched by the ravages of time, this fine spun white cloak appears to be crafted of an otherworldly material that shifts and shimmers in the light.]],
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
level_range = {45, 50},
color = colors.WHITE,
rarity = 500,
cost = 300,
material_level = 5,
wielder = {
combat_def = 10,
combat_spellpower = 8,
confusion_immune = 0.4,
inc_stats = { [Stats.STAT_MAG] = 6, [Stats.STAT_WIL] = 6, [Stats.STAT_LCK] = 10, },
inc_damage = { [DamageType.TEMPORAL]= 10 },
resists_cap = { [DamageType.TEMPORAL] = 10, },
resists = { [DamageType.TEMPORAL] = 20, },
combat_physresist = 20,
combat_mentalresist = 20,
combat_spellresist = 20,
talents_types_mastery = {
["chronomancy/timeline-threading"] = 0.1,
["chronomancy/chronomancy"] = 0.1,
["spell/divination"] = 0.1,
},
},
max_power = 50, power_regen = 1,
use_talent = { id = Talents.T_SEE_THE_THREADS, level = 1, power = 50 },
newEntity{ base = "BASE_LONGSWORD", define_as = "BLOODEDGE",
power_source = {arcane=true},
unique = true,
name = "Blood-Edge", image = "object/artifact/sword_blood_edge.png",
moddable_tile = "special/%s_sword_blood_edge",
moddable_tile_big = true,
desc = [[This deep red sword weeps blood continuously. It was born in the labs of the orcish corrupter Hurik, who sought to make a crystal that would house his soul after death. But his plans were disrupted by a band of sun paladins, and though most died purging his keep of dread minions, their leader Raasul fought through to Hurik's lab, sword in hand. There the two did battle, blade against blood magic, till both fell to the floor with weeping wounds. The orc with his last strength crawled towards his fashioned phylactery, hoping to save himself, but Raasul saw his plans and struck the crystal with his light-bathed sword. It shattered, and in the sudden impulse of energies the steel, crystal and blood were fused into one.
Now the broken fragments of Raasul's soul are trapped in this terrible artifact, his mind warped beyond all sanity by decades of imprisonment. Only the taste of blood calls him forth, his soul stealing the lifeblood of others to take on physical form again, that he may thrash and wail against the living.]],
cost = 1000,
require = { stat = { mag=20, str=32,}, },
material_level = 5,
wielder = {
esp = {["undead/blood"]=1,},
combat_spellpower = 21,
combat_spellcrit = 8,
[DamageType.PHYSICAL] = 15,
[DamageType.BLIGHT] = 15,
max_power = 20, power_regen = 1,
use_talent = { id = Talents.T_BLEEDING_EDGE, level = 4, power = 20 },
dam = 46,
apr = 7,
physcrit = 6,
dammod = {str=1, mag=0.1},
special_on_hit = {desc="15% chance to animate a bleeding foe's blood", fct=function(combat, who, target)
if not rng.percent(15) then return end
local cut = false
-- Go through all timed effects
for eff_id, p in pairs(target.tmp) do
local e = target.tempeffect_def[eff_id]
if e.subtype.cut then
cut = true
end
end
if not (cut) then return end
local tg = {type="hit", range=1}
who:project(tg, target.x, target.y, engine.DamageType.DRAIN_VIM, 80)
local x, y = util.findFreeGrid(target.x, target.y, 5, true, {[engine.Map.ACTOR]=true})
local NPC = require "mod.class.NPC"
local m = NPC.new{
type = "undead", subtype = "blood",
display = "L",
name = "animated blood", color=colors.RED,
resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_animated_blood.png", display_h=1, display_y=0}}},
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
desc = "A haze of blood, vibrant and pulsing through the air, possessed by a warped and cracked soul. Every now and then a scream or wail of agony garbles through it, telling of the mindless suffering undergone by its possessor.",
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, },
rank = 3,
life_rating = 10, exp_worth = 0,
max_vim=200,
max_life = resolvers.rngavg(50,90),
infravision = 20,
autolevel = "dexmage",
ai = "summoned", ai_real = "tactical", ai_state = { talent_in=2, ally_compassion=10},
stats = { str=15, dex=18, mag=18, wil=15, con=10, cun=18 },
level_range = {1, nil}, exp_worth = 0,
silent_levelup = true,
combat_armor = 0, combat_def = 24,
combat = { dam=resolvers.rngavg(10,13), atk=15, apr=15, dammod={mag=0.5, dex=0.5}, damtype=engine.DamageType.BLIGHT, },
resists = { [engine.DamageType.BLIGHT] = 100, [engine.DamageType.NATURE] = -100, },
negative_status_effect_immune = 1,
on_melee_hit = {[engine.DamageType.DRAINLIFE]=resolvers.mbonus(10, 30)},
melee_project = {[engine.DamageType.DRAINLIFE]=resolvers.mbonus(10, 30)},
resolvers.talents{
[who.T_WEAPON_COMBAT]={base=1, every=7, max=10},
[who.T_EVASION]={base=3, every=8, max=7},
[who.T_BLOOD_SPRAY]={base=1, every=6, max = 10},
[who.T_BLOOD_GRASP]={base=1, every=5, max = 9},
[who.T_BLOOD_BOIL]={base=1, every=7, max = 7},
[who.T_BLOOD_FURY]={base=1, every=8, max = 6},
},
resolvers.sustains_at_birth(),
faction = who.faction,
summoner = who, summoner_gain_exp=true,
}
m:resolve()
game.zone:addEntity(game.level, m, "actor", x, y)
m.remove_from_party_on_death = true,
game.party:addMember(m, {
control=false,
type="summon",
title="Summon",
orders = {target=true, leash=true, anchor=true, talents=true},
})
game.logSeen(who, "#GOLD#As the blade touches %s's spilt blood, the blood rises, animated!", target.name:capitalize())
if who:knowTalent(who.T_VIM_POOL) then
game.logSeen(who, "#GOLD#%s draws power from the spilt blood!", who.name:capitalize())
end
end},
},
}
newEntity{ base = "BASE_LONGSWORD", define_as = "SWORD_DAWN",
power_source = {arcane=true},
unique = true,
name = "Dawn's Blade",
unided_name = "shining longsword",
moddable_tile = "special/%s_dawn_blade",
moddable_tile_big = true,
color=colors.YELLOW, image = "object/artifact/dawn_blade.png",
rarity = 260,
desc = [[Said to have been forged in the earliest days of the Sunwall, this longsword shines with the light of daybreak, capable of banishing all shadows.]],
cost = 1000,
require = { stat = { mag=18, str=35,}, },
material_level = 5,
wielder = {
combat_spellpower = 10,
combat_spellcrit = 4,
inc_damage={
[DamageType.LIGHT] = 18,
},
resists_pen={
["celestial/light"] = 0.2,
["celestial/combat"] = 0.2,
},
talent_cd_reduction= {
[Talents.T_HEALING_LIGHT] = 2,
[Talents.T_BARRIER] = 2,
Hachem_Muche
committed
use_power = {
name = function(self, who) return ("invoke dawn, inflicting %0.2f light damage in radius %d (based on Magic) and lighting the area within radius %d"):format(engine.interface.ActorTalents.damDesc(who, engine.DamageType.LIGHT, self.use_power.damage(who)), self.use_power.radius, self.use_power.radius*2) end,
power = 35,
radius = 5,
damage = function(who) return 75 + who:getMag()*2 end,
Hachem_Muche
committed
local dam = self.use_power.damage(who)
local blast = {type="ball", range=0, radius=self.use_power.radius, selffire=false}
who:project(blast, who.x, who.y, engine.DamageType.LIGHT, dam)
game.level.map:particleEmitter(who.x, who.y, blast.radius, "sunburst", {radius=blast.radius})
Hachem_Muche
committed
who:project({type="ball", range=0, radius=self.use_power.radius*2}, who.x, who.y, engine.DamageType.LITE, dam/2)
game:playSoundNear(self, "talents/fireflash")
game.logSeen(who, "%s raises %s and sends out a burst of light!", who.name:capitalize(), self:getName())
return {id=true, used=true}
end
},
combat = {
convert_damage = {[DamageType.LIGHT] = 30},
inc_damage_type={
undead=25,
demon=25,
on_wear = function(self, who)
if who.descriptor and who.descriptor.subclass == "Sun Paladin" then
self:specialWearAdd({"wielder", "positive_regen"}, 0.2)
self:specialWearAdd({"wielder", "positive_regen_ref_mod"}, 0.2)
game.logPlayer(who, "#GOLD#You feel a swell of positive energy!")
end
end,
set_list = { {"define_as","SHIELD_UNSETTING"} },
HousePet
committed
set_desc = {
dawn = "If the sun doesn't set, dawn's power lasts forever.",
},
on_set_complete = function(self, who)
self:specialSetAdd({"combat","melee_project"}, {[engine.DamageType.LIGHT]=15, [engine.DamageType.FIRE]=15})
self:specialSetAdd({"wielder","inc_damage"}, {[engine.DamageType.LIGHT]=12, [engine.DamageType.FIRE]=10})
game.logPlayer(who, "#GOLD#As you wield the sword and shield of the Sunwall, you feel the Sun's light radiating from your core.")
end,
on_set_broken = function(self, who)
game.logPlayer(who, "#GOLD#You feel the Sun's light vanish from within you.")
end,
newEntity{ base = "BASE_AMULET",
power_source = {arcane=true},
unique = true,
name = "Zemekkys' Broken Hourglass", color = colors.WHITE,
unided_name = "a broken hourglass", image="object/artifact/amulet_zemekkys_broken_hourglass.png",
desc = [[This small broken hourglass hangs from a thin gold chain. The glass is cracked and the sand has long since escaped.]],
level_range = {30, 40},
rarity = 300,
cost = 200,
material_level = 4,
metallic = false,
wielder = {
inc_stats = { [Stats.STAT_WIL] = 4, },
inc_damage = { [DamageType.TEMPORAL]= 10 },
resists = { [DamageType.TEMPORAL] = 20 },
resists_cap = { [DamageType.TEMPORAL] = 5 },
spell_cooldown_reduction = 0.1,
},
max_power = 80, power_regen = 1,
use_talent = { id = Talents.T_TIME_STOP, level = 1, power = 50 },
newEntity{ base = "BASE_KNIFE", define_as = "MANDIBLE_UNGOLMOR",
power_source = {nature=true},
unique = true,
name = "Mandible of Ungolmor", image = "object/artifact/mandible_of_ungolmor.png",
moddable_tile = "special/%s_mandible_of_ungolmor",
moddable_tile_big = true,
desc = [[This obsidian-crafted, curved blade is studded with the deadly fangs of the Ungolmor. It seems to drain light from the world around it.]],
level_range = {40, 50},
rarity = 270,
require = { stat = { cun=38 }, },
cost = 650,
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
material_level = 5,
combat = {
dam = 40,
apr = 12,
physcrit = 22,
dammod = {cun=0.30, str=0.35, dex=0.35},
convert_damage ={[DamageType.DARKNESS] = 30},
special_on_crit = {desc="inflicts pinning spydric poison upon the target", fct=function(combat, who, target)
if target:canBe("poison") then
local tg = {type="hit", range=1}
who:project(tg, target.x, target.y, engine.DamageType.SPYDRIC_POISON, {src=who, dam=30, dur=3})
end
end},
},
wielder = {
inc_damage={[DamageType.NATURE] = 30, [DamageType.DARKNESS] = 20,},
inc_stats = {[Stats.STAT_CUN] = 8, [Stats.STAT_DEX] = 4,},
combat_armor = 5,
combat_armor_hardiness = 5,
lite = -2,
},
max_power = 40, power_regen = 1,
use_talent = { id = Talents.T_CREEPING_DARKNESS, level = 3, power = 25 },
}
newEntity{ base = "BASE_KNIFE", define_as = "KINETIC_SPIKE",
power_source = {psionic=true},
unique = true,
name = "Kinetic Spike", image = "object/artifact/kinetic_spike.png",
moddable_tile = "special/%s_kinetic_spike",
moddable_tile_big = true,
desc = [[A simple, rudely crafted stone hilt, this object manifests a blade of wavering, nearly invisible force, like a heat haze, as you grasp it. Despite its simple appearance, it is capable of shearing through solid granite, in the hands of those with the necessary mental fortitude to use it properly.]],
level_range = {42, 50},
rarity = 310,
require = { stat = { wil=42 }, },
cost = 450,
material_level = 5,
combat = {
dam = 38,
apr = 40, -- Hard to imagine much being harder to stop with armor.
physcrit = 10,
dammod = {wil=0.30, str=0.30, dex=0.40},
},
wielder = {
combat_atk = 8,
combat_dam = 15,
resists_pen = {[DamageType.PHYSICAL] = 30},
talents_types_mastery = {
["psionic/augmented-striking"] = 0.2,
},
Hachem_Muche
committed
use_power = {
name = function(self, who) return ("fire a bolt of kinetic force (range %d), dealing 150%% (physical) weapon damage"):format(self.use_power.range) end,
Hachem_Muche
committed
power = 10,
range = 8,
Hachem_Muche
committed
local tg = {type="bolt", range=self.use_power.range}
local x, y = who:getTarget(tg)
if not x or not y then return nil end
local _ _, x, y = who:canProject(tg, x, y)
local target = game.level.map(x, y, engine.Map.ACTOR)
if target then
who:attackTarget(target, engine.DamageType.PHYSICAL, 1.5, true)
game.logSeen(who, "The %s fires a bolt of kinetic force!", self:getName())
else
return
end
return {id=true, used=true}
end
},
}
newEntity{ base = "BASE_STAFF",
power_source = {unknown=true},
unique = true,
name = "Rod of Sarrilon", image = "object/artifact/rod_of_sarrilon.png",
unided_name = "ceremonial staff",
flavor_name = "starstaff",
level_range = {37, 50},
color=colors.VIOLET,
rarity = 250,
desc = [[A plain looking ceremonial rod. It has connections with Time that even chronomancers do not yet understand.]],
cost = 400,
material_level = 5,
require = { stat = { mag=48 }, },
combat = {
is_greater = true,
dam = 30,
apr = 4,
dammod = {mag=1.5},
},
wielder = {
inc_stats = { [Stats.STAT_WIL] = 7, [Stats.STAT_MAG] = 8 },
combat_spellpower = 40,
combat_spellcrit = 15,
inc_damage = { [DamageType.TEMPORAL] = 40, },
resists_pen = { [DamageType.TEMPORAL] = 30, },
teleport_immune = 1,
talent_cd_reduction = {
[Talents.T_CHRONO_TIME_SHIELD] = 3,
[Talents.T_TIME_SHIELD] = 3,
[Talents.T_STOP] = 2,
[Talents.T_ATTENUATE] = 1,
["chronomancy/stasis"] = 0.1,
["chronomancy/flux"] = 0.1,
["spell/temporal"] = 0.1,