Skip to content
Snippets Groups Projects
Commit 5e533001 authored by HousePet's avatar HousePet
Browse files

storing item changes for later

parent 55bdb8dd
No related branches found
No related tags found
No related merge requests found
......@@ -692,6 +692,14 @@ newDamageType{
antimagic_resolve = true,
projector = function(src, x, y, type, dam)
local realdam = DamageType.defaultProjector(src, x, y, type, dam)
if realdam > 0 and src:attr("lightning_brainlocks") then
local target = game.level.map(x, y, Map.ACTOR)
if realdam > target.max_life / 10 then
target:crossTierEffect(target.EFF_BRAINLOCKED, src:combatMindpower())
end
end
return realdam
end,
death_message = {"electrocuted", "shocked", "bolted", "volted", "amped", "zapped"},
......
......@@ -84,6 +84,21 @@ newEntity{
},
}
newEntity{
power_source = {nature=true},
name = " of the jelly", suffix=true, instant_resolve=true,
keywords = {jelly=true},
level_range = {1, 50},
rarity = 4,
cost = 8,
wielder = {
inc_damage={
[DamageType.ACID] = resolvers.mbonus_material(8, 2),
},
equilibrium_regen_when_hit = resolvers.mbonus_material(20, 5, function(e, v) v=v/10 return 0, v end),
},
}
newEntity{
power_source = {nature=true},
name = " of life", suffix=true, instant_resolve=true,
......@@ -126,6 +141,11 @@ newEntity{
[DamageType.ITEM_ANTIMAGIC_MANABURN] = resolvers.mbonus_material(15, 10),
},
},
wielder = {
resists={
[DamageType.ARCANE] = resolvers.mbonus_material(8, 2),
},
},
}
newEntity{
......@@ -164,6 +184,12 @@ newEntity{
game.logSeen(target, "%s's %s has been #ORCHID#burned#LAST#!", target.name:capitalize(), t.name)
end},
},
wielder = {
inc_damage={
[DamageType.ARCANE] = resolvers.mbonus_material(8, 2),
},
combat_spellresist = resolvers.mbonus_material(8, 2),
},
}
......@@ -220,6 +246,35 @@ newEntity{
max_psi = resolvers.mbonus_material(40, 10),
},
}
newEntity{
power_source = {psionic=true},
name = "creative ", prefix=true, instant_resolve=true,
keywords = {creative=true},
level_range = {1, 50},
rarity = 4,
cost = 8,
wielder = {
inc_stats = {
[Stats.STAT_CUN] = resolvers.mbonus_material(6, 2),
},
combat_critical_power = resolvers.mbonus_material(20, 5),
},
}
newEntity{
power_source = {psionic=true},
name = " of resolve", suffix=true, instant_resolve=true,
keywords = {resolve=true},
level_range = {1, 50},
rarity = 8,
cost = 8,
wielder = {
inc_stats = {
[Stats.STAT_WIL] = resolvers.mbonus_material(6, 2),
},
combat_physresist = resolvers.mbonus_material(8, 2),
},
}
newEntity{
power_source = {psionic=true},
......@@ -269,13 +324,13 @@ newEntity{
cost = 40,
wielder = {
inc_damage={
[DamageType.DARKNESS] = resolvers.mbonus_material(8, 2),
[DamageType.DARKNESS] = resolvers.mbonus_material(16, 4),
},
resists_pen={
[DamageType.DARKNESS] = resolvers.mbonus_material(8, 2),
[DamageType.DARKNESS] = resolvers.mbonus_material(16, 4),
},
resists={
[DamageType.DARKNESS] = resolvers.mbonus_material(8, 2),
[DamageType.DARKNESS] = resolvers.mbonus_material(16, 4),
},
blind_immune = resolvers.mbonus_material(15, 10, function(e, v) v=v/100 return 0, v end),
talents_types_mastery = {
......@@ -342,6 +397,58 @@ newEntity{
harmonious = set_broken,},
}
newEntity{
power_source = {antimagic=true},
name = "purifying ", prefix=true, instant_resolve=true,
keywords = {purifying=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 35,
cost = 40,
wielder = {
on_melee_hit={
[DamageType.ITEM_ANTIMAGIC_MANABURN] = resolvers.mbonus_material(16, 4),
},
inc_damage={
[DamageType.ARCANE] = resolvers.mbonus_material(8, 2),
},
resists_pen={
[DamageType.ARCANE] = resolvers.mbonus_material(8, 2),
},
resists={
[DamageType.ARCANE] = resolvers.mbonus_material(8, 2),
},
},
resolvers.charmt(Talents.T_DESTROY_MAGIC, {3,4,5}, 30),
ms_set_harmonious = true, ms_set_resonating = true,
set_list = {
multiple = true,
harmonious = {{"ms_set_nature", true, inven_id = other_hand,},},
resonating = {{"ms_set_psionic", true, inven_id = other_hand,},},
},
on_set_complete = {
multiple = true,
harmonious = function(self, who, inven_id, set_objects)
for _, d in ipairs(set_objects) do
if d.object ~= self then
return d.object.on_set_complete.harmonious(self, who, inven_id, set_objects)
end
end
end,
resonating = function(self, who, inven_id, set_objects)
for _, d in ipairs(set_objects) do
if d.object ~= self then
return d.object.on_set_complete.resonating(self, who, inven_id, set_objects)
end
end
end,
},
on_set_broken = {
multiple = true,
harmonious = set_broken,
resonating = set_broken,},
}
newEntity{
power_source = {psionic=true},
name = "resonating ", prefix=true, instant_resolve=true,
......@@ -381,6 +488,79 @@ newEntity{
resonating = set_broken,},
}
newEntity{
power_source = {psionic=true},
name = "honing ", prefix=true, instant_resolve=true,
keywords = {honing=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 35,
cost = 40,
wielder = {
inc_damage={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
},
resists_pen={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
},
resists={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
},
inc_stats = {
[Stats.STAT_CUN] = resolvers.mbonus_material(3, 1),
[Stats.STAT_WIL] = resolvers.mbonus_material(3, 1),
},
},
ms_set_resonating = true,
set_list = {
multiple = true,
resonating = {{"ms_set_psionic", true, inven_id = other_hand,},},},
on_set_complete = {
multiple = true,
resonating = function(self, who, inven_id, set_objects)
for _, d in ipairs(set_objects) do
if d.object ~= self then
return d.object.on_set_complete.resonating(self, who, inven_id, set_objects)
end
end
end,},
on_set_broken = {
multiple = true,
resonating = set_broken,},
}
newEntity{
power_source = {psionic=true},
name = "parasitic ", prefix=true, instant_resolve=true,
keywords = {parasitic=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 35,
cost = 40,
wielder = {
hate_on_crit = resolvers.mbonus_material(5, 1),
max_hate = resolvers.mbonus_material(20, 5),
life_leech_chance = resolvers.mbonus_material(20, 5),
life_leech_value = resolvers.mbonus_material(20, 5),
},
ms_set_resonating = true,
set_list = {
multiple = true,
resonating = {{"ms_set_psionic", true, inven_id = other_hand,},},},
on_set_complete = {
multiple = true,
resonating = function(self, who, inven_id, set_objects)
for _, d in ipairs(set_objects) do
if d.object ~= self then
return d.object.on_set_complete.resonating(self, who, inven_id, set_objects)
end
end
end,},
on_set_broken = {
multiple = true,
resonating = set_broken,},
}
set_complete = function(self, who, inven_id, set_objects)
if inven_id == "MAINHAND" then
game.logPlayer(who, "#GREEN#Your mindstars resonate with Nature's purity.")
......@@ -618,18 +798,19 @@ newEntity{
cost = 40,
wielder = {
on_melee_hit={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
[DamageType.PHYSICAL] = resolvers.mbonus_material(16, 4),
},
inc_damage={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
[DamageType.PHYSICAL] = resolvers.mbonus_material(16, 4),
},
resists_pen={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
[DamageType.PHYSICAL] = resolvers.mbonus_material(16, 4),
},
resists={
[DamageType.PHYSICAL] = resolvers.mbonus_material(8, 2),
[DamageType.PHYSICAL] = resolvers.mbonus_material(16, 4),
},
},
resolvers.charmt(Talents.T_BURROW, 1, 30),
ms_set_drake = true, ms_set_nature = true,
set_list = {
multiple = true,
......@@ -704,7 +885,53 @@ newEntity{
wyrm = set_broken,},
}
-- Mentalist Set: For a yet to be written psi class and/or Mindslayers
set_complete = function(self, who, inven_id)
if inven_id == "MAINHAND" then
game.logPlayer(who, "#PURPLE#You feel the spirit of the wyrm stirring inside you!")
end
local Stats = require "engine.interface.ActorStats"
self:specialSetAdd({"wielder","life_regen"}, self.material_level/2)
end
newEntity{
power_source = {nature=true}, is_drake_star = true,
name = " of venom", suffix=true, instant_resolve=true,
keywords = {venom=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 40,
cost = 40,
wielder = {
on_melee_hit={
[DamageType.ACID] = resolvers.mbonus_material(16, 4),
},
inc_damage={
[DamageType.ACID] = resolvers.mbonus_material(16, 4),
},
resists_pen={
[DamageType.ACID] = resolvers.mbonus_material(16, 4),
},
resists={
[DamageType.ACID] = resolvers.mbonus_material(16, 4),
},
life_regen = resolvers.mbonus_material(15, 5, function(e, v) v=v/10 return 0, v end),
},
ms_set_drake = true, ms_set_nature = true,
set_list = {
multiple = true,
harmonious = {{"ms_set_harmonious", true, inven_id = other_hand,},},
wyrm = {{"ms_set_wyrm", true, inven_id = other_hand,},},},
on_set_complete = {
multiple = true,
harmonious = set_complete,
wyrm = set_complete,},
on_set_broken = {
multiple = true,
harmonious = set_broken,
wyrm = set_broken,},
}
-- Dreamer Set: For Solipsists
set_complete = function(self, who, inven_id)
if inven_id == "MAINHAND" then
......@@ -776,6 +1003,106 @@ newEntity{
dreamers = set_broken,},
}
-- Channelers Set: For Mindslayers
set_complete = function(self, who, inven_id)
local Talents = require "engine.interface.ActorTalents"
if inven_id == "MAINHAND" then
game.logPlayer(who, "#YELLOW#Psionic energy flows through your mindstars.")
end
self:specialSetAdd({"wielder","talent_cd_reduction"}, {
[Talents.T_KINETIC_SHIELD]=1,
[Talents.T_THERMAL_SHIELD]=1,
[Talents.T_CHARGED_SHIELD]=1,
[Talents.T_KINETIC_LEECH]=1,
[Talents.T_THERMAL_LEECH]=1,
[Talents.T_CHARGE_LEECH]=1,
})
end
newEntity{
power_source = {psionic=true}, define_as = "MS_EGO_SET_ABSORBING",
name = "absorbing ", prefix=true, instant_resolve=true,
keywords = {absorbing=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 40,
cost = 40,
wielder = {
resists = {
[DamageType.FIRE] = resolvers.mbonus_material(20, 5),
[DamageType.COLD] = resolvers.mbonus_material(20, 5),
[DamageType.LIGHTNING] = resolvers.mbonus_material(20, 5),
},
talents_types_mastery = {
["psionic/voracity"] = resolvers.mbonus_material(1, 1, function(e, v) v=v/10 return 0, v end),
["psionic/absorption"] = resolvers.mbonus_material(1, 1, function(e, v) v=v/10 return 0, v end),
},
},
ms_set_channeler_absorbing = true, ms_set_psionic = true,
set_list = {
multiple = true,
resonating = {{"ms_set_resonating", true, inven_id = other_hand,},},
channeler = {{"ms_set_channeler_projecting", true, inven_id = other_hand,},},},
on_set_complete = {
multiple = true,
resonating = set_complete,
channeler = set_complete,},
on_set_broken = {
multiple = true,
resonating = set_broken,
channeler = set_broken,},
}
set_complete = function(self, who, inven_id)
local Talents = require "engine.interface.ActorTalents"
if inven_id == "MAINHAND" then
game.logPlayer(who, "#YELLOW#Psionic energy flows through your mindstars.")
end
self:specialSetAdd({"wielder","talent_cd_reduction"}, {
[Talents.T_KINETIC_AURA]=1,
[Talents.T_THERMAL_AURA]=1,
[Talents.T_CHARGED_AURA]=1,
[Talents.T_FRENZIED_FOCUS]=1,
[Talents.T_PYROKINESIS]=1,
[Talents.T_BRAIN_STORM]=1,
})
end
newEntity{
power_source = {psionic=true}, define_as = "MS_EGO_SET_PROJECTING",
name = "projecting ", prefix=true, instant_resolve=true,
keywords = {projecting=true},
level_range = {30, 50},
greater_ego = 1,
rarity = 30,
cost = 40,
wielder = {
inc_damage = {
[DamageType.FIRE] = resolvers.mbonus_material(20, 5),
[DamageType.COLD] = resolvers.mbonus_material(20, 5),
[DamageType.LIGHTNING] = resolvers.mbonus_material(20, 5),
},
talents_types_mastery = {
["psionic/projection"] = resolvers.mbonus_material(1, 1, function(e, v) v=v/10 return 0, v end),
["psionic/focus"] = resolvers.mbonus_material(1, 1, function(e, v) v=v/10 return 0, v end),
},
},
ms_set_channeler_projecting = true, ms_set_psionic = true,
set_list = {
multiple = true,
resonating = {{"ms_set_resonating", true, inven_id = other_hand,},},
channeler = {{"ms_set_channeler_absorbing", true, inven_id = other_hand,},},},
on_set_complete = {
multiple = true,
resonating = set_complete,
channeler = set_complete,},
on_set_broken = {
multiple = true,
resonating = set_broken,
channeler = set_broken,},
}
-- Mitotic Set: Single Mindstar that splits in two
newEntity{
power_source = {nature=true},
......
......@@ -505,6 +505,9 @@ newEntity{ base = "BASE_KNIFE", define_as = "KINETIC_SPIKE",
combat_atk = 8,
combat_dam = 15,
resists_pen = {[DamageType.PHYSICAL] = 30},
talents_types_mastery = {
["psionic/augmented-striking"] = 0.2,
},
},
max_power = 10, power_regen = 1,
use_power = { name = "fires a bolt of kinetic force, doing 150% weapon damage", power = 10,
......
......@@ -162,6 +162,7 @@ newEntity{ base = "BASE_RING",
[DamageType.COLD] = 25,
[DamageType.NATURE] = 10,
},
inc_damage={ [DamageType.COLD] = 15, },
},
}
......@@ -1715,7 +1716,7 @@ newEntity{ base = "BASE_LONGSWORD", define_as = "ART_PAIR_TWSWORD",
melee_project={[DamageType.TEMPORAL] = 5},
convert_damage = {
[DamageType.TEMPORAL] = 30,
},
},
},
wielder = {
inc_damage={
......@@ -2715,6 +2716,7 @@ newEntity{ base = "BASE_WHIP",
},
wielder = {
combat_atk = 7,
inc_damage={ [DamageType.LIGHTNING] = 10, },
},
max_power = 10, power_regen = 1,
use_power = { name = "strike an enemy in range 3, releasing a burst of lightning", power = 10,
......@@ -2751,7 +2753,6 @@ newEntity{ base = "BASE_WHIP",
level_range = {18, 28},
material_level = 3,
combat = {
is_psionic_focus=true,
dam = 19,
apr = 7,
physcrit = 5,
......@@ -3539,6 +3540,9 @@ newEntity{ base = "BASE_LEATHER_BOOT",
resists={
[DamageType.PHYSICAL] = 5,
},
talents_types_mastery = {
["psionic/augmented-mobility"] = 0.2,
},
},
max_power = 20, power_regen = 1,
use_talent = { id = Talents.T_TELEKINETIC_LEAP, level = 3, power = 20 },
......@@ -6941,3 +6945,521 @@ newEntity{ base = "BASE_GREATMAUL", define_as = "DREAM_MALLEUS",
end})
end,
}
newEntity{ base = "BASE_WIZARD_HAT",
power_source = {nature=true},
unique = true,
name = "Cloud Caller",
unided_name = "broad brimmed hat",
desc = [[This hat's broad brim protects you from harsh sunlight and sudden rain showers.]],
color = colors.BLUE, image = "object/artifact/malslek_the_accursed_hat.png",
level_range = {1, 10},
rarity = 300,
cost = 30,
material_level = 1,
wielder = {
resists = {
[DamageType.LIGHT] = 10,
[DamageType.LIGHTNING] = 10,
},
inc_damage={
[DamageType.LIGHT] = 10,
[DamageType.LIGHTNING] = 10,
},
},
max_power = 30, power_regen = 1,
use_talent = { id = Talents.T_CALL_LIGHTNING, level=1, power = 20 },
}
newEntity{ base = "BASE_TOOL_MISC",
power_source = {psionic=true},
unique=true, rarity=300,
type = "charm", subtype="torque",
name = "The Jolt", image = "object/artifact/telekinetic_core.png",
unided_name = "tingling torque",
color = colors.BLUE,
level_range = {10, 20},
desc = [[This torque feels tingly to the touch, but seems to enhance your thinking.]],
special_desc = function(self) return "Any lightning damage you do that is more than 10% of the victim's maximum life will attempt to mental crosstier the target, inflicting Brainlock if your mindpower is a tier above their mindsave." end,
cost = 100,
material_level = 2,
wielder = {
inc_damage={
[DamageType.MIND] = 10,
[DamageType.LIGHTNING] = 10,
},
inc_stats = {[Stats.STAT_CUN] = 4,},
lightning_brainlocks = 1,
},
}
newEntity{ base = "BASE_BATTLEAXE",
power_source = {nature=true},
unique = true,
unided_name = "damp steel battle axe",
name = "Stormfront", color = colors.BLUE, image = "object/artifact/crude_iron_battleaxe_of_kroll.png",
desc = [[The blade glows faintly blue, and reflects a sky full of stormy clouds.]],
require = { stat = { str=16 }, },
level_range = {10, 20},
rarity = 300,
cost = 100,
material_level = 2,
combat = {
dam = 20,
apr = 2,
physcrit = 5,
dammod = {str=1.2},
melee_project={
[DamageType.LIGHTNING]=10,
[DamageType.COLD]=10,
},
special_on_crit = {desc="inflicts either shocked or wet, chosen at random", fct=function(combat, who, target)
if not target or target == self then return end
if rng.percent(50) then
target:setEffect(target.EFF_SHOCKED, 3, {src=who})
else
target:setEffect(target.EFF_WET, 3, {src=who})
end
end},
},
wielder = {
inc_damage = {
[DamageType.LIGHTNING]=10,
[DamageType.COLD]=10,
},
},
}
newEntity{ base = "BASE_MINDSTAR", define_as = "EYE_OF_SUMMER",
power_source = {nature=true},
unique = true,
name = "Eye of Summer",
unided_name = "warm mindstar",
level_range = {10, 20},
color=colors.RED, image = "object/artifact/bloomsoul.png",
rarity = 300,
desc = [[This mindstar glows with a bright warm light, but seems somehow incomplete.]],
cost = 40,
require = { stat = { wil=18 }, },
material_level = 2,
combat = {
dam = 8,
apr = 18,
physcrit = 5,
dammod = {wil=0.35, cun=0.15},
damtype = DamageType.FIRE,
},
wielder = {
combat_mindpower = 6,
combat_mindcrit = 4,
inc_damage = { [DamageType.FIRE]=10 },
resists_pen = { [DamageType.FIRE] = 10 },
resists = { [DamageType.COLD]=-10 },
global_speed_add = 0.05,
},
talent_on_mind = {chance=10, talent=Talents.T_FLAME_FURY, level=2},
set_list = { {"define_as", "EYE_OF_WINTER"} },
on_set_complete = function(self, who)
local Talents = require "engine.interface.ActorTalents"
self:specialSetAdd({"wielder","resists"}, { [DamageType.COLD]=20 })
self:specialSetAdd({"wielder","combat_mindpower"}, 4)
game.logSeen(who, "#GREEN#You feel the seasons in perfect balance.")
end,
on_set_broken = function(self, who)
game.logPlayer(who, "#GREEN#The seasons not longer feel balanced.")
end,
}
newEntity{ base = "BASE_MINDSTAR", define_as = "EYE_OF_WINTER",
power_source = {nature=true},
unique = true,
name = "Eye of Winter",
unided_name = "cold mindstar",
level_range = {10, 20},
color=colors.BLUE, image = "object/artifact/bloomsoul.png",
rarity = 300,
desc = [[This mindstar glows with a dim cool light, but seems somehow incomplete.]],
cost = 40,
require = { stat = { wil=18 }, },
material_level = 2,
combat = {
dam = 8,
apr = 18,
physcrit = 5,
dammod = {wil=0.35, cun=0.15},
damtype = DamageType.COLD,
},
wielder = {
combat_mindpower = 6,
combat_mindcrit = 4,
inc_damage = { [DamageType.COLD]=10 },
resists_pen = { [DamageType.COLD] = 10 },
resists = { [DamageType.FIRE]=-10 },
combat_armor = 10,
},
talent_on_mind = {chance=10, talent=Talents.T_WINTER_S_FURY, level=2},
set_list = { {"define_as", "EYE_OF_SUMMER"} },
on_set_complete = function(self, who)
local Talents = require "engine.interface.ActorTalents"
self:specialSetAdd({"wielder","resists"}, { [DamageType.FIRE]=20 })
self:specialSetAdd({"wielder","combat_mindpower"}, 4)
end,
on_set_broken = function(self, who)
end,
}
newEntity{ base = "BASE_GAUNTLETS",
power_source = {psionic=true},
unique = true,
name = "Ruthless Grip", color = colors.DARK_BLUE, image = "object/artifact/dakhtuns_gauntlets.png",
unided_name = "sinister gauntlets",
desc = [[Crafted for a warlord who wanted to keep his subjects under a stralite grip. Dark thoughts went into the making of these gauntlets, literally.]],
level_range = {30, 40},
rarity = 300,
cost = 300,
material_level = 4,
wielder = {
combat_armor = 5,
inc_damage = {
[DamageType.DARKNESS]=20,
[DamageType.COLD]=20,
},
melee_project = {
[DamageType.DARKNESS]=20,
[DamageType.COLD]=20,
},
max_hate = 20,
healing_factor = -0.2,
die_at = -100,
combat = {
dam = 30,
apr = 15,
physcrit = 10,
physspeed = 0.2,
dammod = {dex=0.4, str=-0.6, cun=0.4, wil=0.4 },
damrange = 0.3,
},
},
max_power = 30, power_regen = 1,
use_talent = { id = Talents.T_FROST_GRAB, level=4, power = 20 },
}
newEntity{ base = "BASE_KNIFE",
power_source = {psionic=true, nature=true},
unique = true,
name = "Icy Kill", image = "object/artifact/mercy.png",
unided_name = "sharpened icicle",
moddable_tile = "special/%s_mercy",
moddable_tile_big = true,
desc = [[As any scryer knows, the link between the murderer and the murdered is the murder weapon, and a scryer can follow that link from the murdered to the weapon to the murderer.
One rather cold blooded killer thought of a way around this. By carving blades out of ice, they could kill as they wished and the link would just melt away.
Their killing spree ended when one of the victims got lucky and managed to stab the murderer in the heart. After being united with the cold heart that created it, the final ice blade has never melted.]],
level_range = {30, 40},
rarity = 300,
require = { stat = { dex=42 }, },
cost = 400,
material_level = 4,
combat = {
dam = 35,
apr = 10,
physcrit = 15,
dammod = {str=0.45, dex=0.45},
melee_project = { [DamageType.COLD]=30 },
special_on_crit = {desc="freezes the target", fct=function(combat, who, target)
if not target or target == self then return end
if target:canBe("stun") then
local check = math.max(who:combatSpellpower(), who:combatMindpower(), who:combatAttack())
target:setEffect(target.EFF_FROZEN, 4, {src=who, apply_power=check})
end
end},
special_on_kill = {desc="explodes a frozen creature (damage scales with willpower)", fct=function(combat, who, target)
if not target or target == self then return end
if target:hasEffect(target.EFF_FROZEN) then
local tg = {type="ball", range=0, radius=1, selffire=false}
local grids = who:project(tg, target.x, target.y, engine.DamageType.ICE, {chance=50, dam=30 + who:getWil()*0.5})
game.level.map:particleEmitter(target.x, target.y, tg.radius, "ball_ice", {radius=tg.radius})
end
end},
},
wielder = {
inc_stats = {[Stats.STAT_CUN] = 6, [Stats.STAT_WIL] = 6,},
inc_damage = { [DamageType.COLD]=25 },
iceblock_pierce = 50,
hate_per_kill = 4,
},
}
newEntity{ base = "BASE_MACE",
power_source = {psionic=true},
name = "Thunderfall", define_as = "THUNDERFALL", image="object/artifact/club_ureslaks_femur.png",
unided_name = "a strangely colored bone", unique = true,
moddable_tile = "special/%s_club_ureslaks_femur",
moddable_tile_big = true,
desc = [[Tremendous power is concentrated in this heavy mace. Just dropping it can knock nearby walls down.]],
level_range = {40, 50},
require = { stat = { str=50, wil=30 }, },
rarity = 400,
cost = 500,
material_level = 5,
combat = {
dam = 50,
apr = 6,
physcrit = 3,
dammod = {str=1},
burst_on_hit = {
[DamageType.PHYSICAL] = 50,
[DamageType.LIGHTNING] = 50,
},
burst_on_crit = {
[DamageType.PHYSICAL] = 100,
[DamageType.LIGHTNING] = 100,
},
},
max_power = 60, power_regen = 1,
use_power = { name = "strike a target at range for an automatic critical hit as lightning damage", power = 60,
use = function(self, who)
local tg = {type="hit", range=10}
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
local x2, y2 = x + rng.range(-4, 4), y - rng.range(5, 10)
game.level.map:particleEmitter(x, y, math.max(math.abs(x2-x), math.abs(y2-y)), "lightning", {tx=x2-x, ty=y2-y})
game:playSoundNear({x=x,y=y}, "talents/thunderstorm")
who.turn_procs.auto_phys_crit = true
who:attackTarget(target, engine.DamageType.LIGHTNING, 1.0, true)
who.turn_procs.auto_phys_crit = nil
if core.shader.active() then game.level.map:particleEmitter(x, y, 2, "ball_lightning_beam", {radius=2, tx=x, ty=y}, {type="lightning"})
else game.level.map:particleEmitter(x, y, 2, "ball_lightning_beam", {radius=2, tx=x, ty=y}) end
else
return
end
return {id=true, used=true}
end
},
}
newEntity{ base = "BASE_MINDSTAR", define_as = "KINETIC_FOCUS",
power_source = {psionic=true},
unique = true,
name = "Kinetic Focus",
unided_name = "humming mindstar",
level_range = {10, 30},
color=colors.YELLOW, image = "object/artifact/bloomsoul.png",
rarity = 300,
desc = [[Kinetic energies are focussed in the core of this mindstar.]],
special_desc = function(self) return "This item is part of a set." end,
cost = 50,
require = { stat = { wil=18 }, },
material_level = 2,
combat = {
dam = 6,
apr = 18,
physcrit = 5,
dammod = {wil=0.35, cun=0.15},
damtype = DamageType.PHYSICAL,
},
wielder = {
combat_mindpower = 6,
combat_mindcrit = 2,
inc_damage = { [DamageType.PHYSICAL]=10 },
resists_pen = { [DamageType.PHYSICAL] = 6 },
resists = { [DamageType.PHYSICAL]=10 },
psi_on_crit = 1,
combat_physresist = 6,
talents_types_mastery = { ["psionic/kinetic-mastery"] = 0.1 },
learn_talent = { [Talents.T_PSIONIC_MAELSTROM] = 1,},
},
set_list = {
multiple = true,
kinchar = {{"define_as", "CHARGED_FOCUS"},},
kinther = {{"define_as", "THERMAL_FOCUS"},},
},
on_set_complete = {
multiple = true,
kinchar = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 6)
self:specialSetAdd({"wielder","combat_mindcrit"}, 6)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.PHYSICAL]=10 })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.PHYSICAL]=6 })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.PHYSICAL]=10 })
self:specialSetAdd({"wielder","psi_on_crit"}, 1)
self:specialSetAdd({"wielder","combat_physresist"}, 6)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/kinetic-mastery"] = 0.1 })
end,
kinther = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 6)
self:specialSetAdd({"wielder","combat_mindcrit"}, 6)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.PHYSICAL]=10 })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.PHYSICAL]=6 })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.PHYSICAL]=10 })
self:specialSetAdd({"wielder","psi_on_crit"}, 1)
self:specialSetAdd({"wielder","combat_physresist"}, 6)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/kinetic-mastery"] = 0.1 })
end,
},
on_set_broken = function(self, who)
end,
}
newEntity{ base = "BASE_MINDSTAR", define_as = "CHARGED_FOCUS",
power_source = {psionic=true},
unique = true,
name = "Charged Focus",
unided_name = "sparking mindstar",
level_range = {20, 40},
color=colors.BLUE, image = "object/artifact/bloomsoul.png",
rarity = 300,
desc = [[Electrical energies are focussed in the core of this mindstar.]],
special_desc = function(self) return "This item is part of a set." end,
cost = 100,
require = { stat = { wil=24 }, },
material_level = 3,
combat = {
dam = 10,
apr = 24,
physcrit = 5,
dammod = {wil=0.4, cun=0.2},
damtype = DamageType.LIGHTNING,
},
wielder = {
combat_mindpower = 9,
combat_mindcrit = 5,
inc_damage = { [DamageType.LIGHTNING]=15 },
resists_pen = { [DamageType.LIGHTNING] = 9 },
resists = { [DamageType.LIGHTNING]=15 },
max_psi = 30,
combat_mentalresist = 9,
talents_types_mastery = { ["psionic/charged-mastery"] = 0.15 },
learn_talent = { [Talents.T_PSIONIC_MAELSTROM] = 1,},
},
set_list = {
multiple = true,
kinchar = {{"define_as", "KINETIC_FOCUS"},},
charther = {{"define_as", "THERMAL_FOCUS"},},
},
on_set_complete = {
multiple = true,
kinchar = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 3)
self:specialSetAdd({"wielder","combat_mindcrit"}, 3)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.LIGHTNING]=5 })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.LIGHTNING]=3 })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.LIGHTNING]=5 })
self:specialSetAdd({"wielder","max_psi"}, 10)
self:specialSetAdd({"wielder","combat_mentalresist"}, 3)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/charged-mastery"] = 0.05 })
end,
charther = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 6)
self:specialSetAdd({"wielder","combat_mindcrit"}, 6)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.LIGHTNING]=10 })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.LIGHTNING]=6 })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.LIGHTNING]=10 })
self:specialSetAdd({"wielder","max_psi"}, 20)
self:specialSetAdd({"wielder","combat_mentalresist"}, 6)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/charged-mastery"] = 0.1 })
end,
},
on_set_broken = function(self, who)
end,
}
newEntity{ base = "BASE_MINDSTAR", define_as = "THERMAL_FOCUS",
power_source = {psionic=true},
unique = true,
name = "Thermal Focus",
unided_name = "blazing mindstar",
level_range = {30, 50},
color=colors.RED, image = "object/artifact/bloomsoul.png",
rarity = 300,
desc = [[Thermal energies are focussed in the core of this mindstar.]],
special_desc = function(self) return "This item is part of a set." end,
cost = 400,
require = { stat = { wil=35 }, },
material_level = 4,
combat = {
dam = 14,
apr = 32,
physcrit = 5,
dammod = {wil=0.45, cun=0.25},
damtype = DamageType.FIRE,
convert_damage = {
[DamageType.COLD] = 50,
},
},
wielder = {
combat_mindpower = 12,
combat_mindcrit = 8,
inc_damage = { [DamageType.FIRE]=20, [DamageType.COLD]=20, },
resists_pen = { [DamageType.FIRE] = 12, [DamageType.COLD]=12, },
resists = { [DamageType.FIRE]=20, [DamageType.COLD]=20, },
psi_regen = 1,
combat_spellresist = 12,
talents_types_mastery = { ["psionic/thermal-mastery"] = 0.2 },
learn_talent = { [Talents.T_PSIONIC_MAELSTROM] = 1,},
},
set_list = {
multiple = true,
kinther = {{"define_as", "KINETIC_FOCUS"},},
charther = {{"define_as", "CHARGED_FOCUS"},},
},
on_set_complete = {
multiple = true,
kinther = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 3)
self:specialSetAdd({"wielder","combat_mindcrit"}, 3)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.FIRE]=5, [engine.DamageType.COLD]=5, })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.FIRE]=3, [engine.DamageType.COLD]=3, })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.FIRE]=5, [engine.DamageType.COLD]=5, })
self:specialSetAdd({"wielder","psi_regen"}, 1)
self:specialSetAdd({"wielder","combat_spellresist"}, 3)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/thermal-mastery"] = 0.05 })
end,
charther = function(self, who)
self:specialSetAdd({"wielder","combat_mindpower"}, 3)
self:specialSetAdd({"wielder","combat_mindcrit"}, 3)
self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.FIRE]=5, [engine.DamageType.COLD]=5, })
self:specialSetAdd({"wielder","resists_pen"}, { [engine.DamageType.FIRE]=3, [engine.DamageType.COLD]=3, })
self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.FIRE]=5, [engine.DamageType.COLD]=5, })
self:specialSetAdd({"wielder","psi_regen"}, 1)
self:specialSetAdd({"wielder","combat_spellresist"}, 3)
self:specialSetAdd({"wielder","talents_types_mastery"},{ ["psionic/thermal-mastery"] = 0.05 })
end,
},
on_set_broken = function(self, who)
end,
}
newEntity{ base = "BASE_LEATHER_BELT",
power_source = {psionic=true},
unique = true,
name = "Lightning Catcher", image = "object/artifact/belt_girdle_of_preservation.png",
unided_name = "coiled metal belt",
desc = [[A fine mesh of metal threads held together by a sturdy chain. Sparks dance across it.]],
special_desc = function(self) return [[Taking lightning damage or making critical hits builds 2 energy charges, which give you +5% lightning damage and +1 to all stats.
The charges decay at a rate of 1 per turn.]] end,
color = colors.WHITE,
level_range = {40, 50},
rarity = 400,
cost = 750,
material_level = 5,
wielder = {
resists = {
[DamageType.LIGHTNING] = 30,
},
stun_immune = 0.3,
fatigue = 5,
},
callbackOnTakeDamage = function(self, src, x, y, type, dam, tmp, no_martyr)
if type == engine.DamageType.LIGHTNING then
self:setEffect(self.EFF_CAUGHT_LIGHTNING, 2, {})
end
end,
callbackOnCrit = function(self, src, type, dam, chance, target)
src:setEffect(src.EFF_CAUGHT_LIGHTNING, 2, {})
end,
}
......@@ -624,3 +624,32 @@ newTalent{
return ([[Can block up to 1 hit per 10 turns.]])
end,
}
newTalent{
name = "Psionic Maelstrom",
type = {"misc/objects", 1},
points = 5,
psi = 50,
cooldown = 50,
range = 10,
tactical = { AREAATTACK = 4 },
getDuration = function(self, t) return 8 end,
getDamage = function(self, t) return self:combatTalentMindDamage(t, 30, 300) end,
action = function(self, t)
local kinetic, charged, thermal = false, false, false
local object, index, object_inven_id = self:findInAllInventoriesBy("define_as", "KINETIC_FOCUS")
if object and self:getInven(object_inven_id).worn then kinetic = true end
object, index, object_inven_id = self:findInAllInventoriesBy("define_as", "CHARGED_FOCUS")
if object and self:getInven(object_inven_id).worn then charged = true end
object, index, object_inven_id = self:findInAllInventoriesBy("define_as", "THERMAL_FOCUS")
if object and self:getInven(object_inven_id).worn then thermal = true end
self:setEffect(self.EFF_PSIONIC_MAELSTROM, t.getDuration(self, t), {kinetic=kinetic, charged=charged, thermal=thermal, dam=self:mindCrit(t.getDamage(self, t))})
game:playSoundNear(self, "talents/spell_generic2")
return true
end,
info = function(self, t)
return ([[For the next 8 turns, powerful blasts of psionic energies will erupt from you, doing %d damage.]]):format(t.getDamage(self, t))
end,
}
......@@ -29,7 +29,7 @@ newTalent{
no_energy = true,
tactical = { BUFF = 2 },
getSpeed = function(self, t) return self:combatTalentScale(t, 0.2, 0.5, 0.75) end,
getKBVulnerable = function(self, t) return self:combatTalentLimit(t, 1, 0.2, 0.8) end,
getKBVulnerable = function(self, t) return 1 - self:combatTalentLimit(t, 1, 0.3, 0.7) end,
activate = function(self, t)
return {
speed = self:addTemporaryValue("movement_speed", t.getSpeed(self, t)),
......
......@@ -69,7 +69,7 @@ newTalent{
-- Force "wield"
self:addObject(pf, o)
game.logSeen(self, "%s wears: %s.", self.name:capitalize(), o:getName{do_color=true})
self:sortInven()
self:talentDialogReturn(true)
end))
......
......@@ -506,7 +506,7 @@ newTalent{
local targets = t.getTargNum(self,t)
local dur = t.duration(self,t)
return ([[Overcharge your psionic focus with energy for %d turns, producing a different effect depending on what it is.
A telekinetically wielded weapon enters a frenzy, striking up to %d times every turn, also increases the radius by %d.
A telekinetically wielded weapon enters a frenzy, striking up to %d enemies per turn, also increases the radius by %d.
A mindstar will attempt to pull in all enemies within its normal range.
A gem will fire an energy bolt at a random enemy in range 6, each turn for %0.1f damage. The type is determined by the colour of the gem. Damage scales with Mindpower.]]):
format(dur, targets, targets, t.getDamage(self,t))
......
......@@ -3070,7 +3070,7 @@ newEffect{
newEffect{
name = "STATIC_CHARGE", image = "talents/static_net.png",
desc = "Static Charge",
long_desc = function(self, eff) return ("You have accumulated an electric charge. Your next melee hit does %d extra lightning damage.."):format(eff.power) end,
long_desc = function(self, eff) return ("You have accumulated an electric charge. Your next melee hit does %d extra lightning damage."):format(eff.power) end,
type = "mental",
subtype = { lightning=true },
status = "beneficial",
......@@ -3154,7 +3154,7 @@ newEffect{
desc = "Transcendent Electrokinesis",
long_desc = function(self, eff) return ("Your electrokinesis transcends normal limits. +%d%% Lightning damage and +%d%% Lightning damage penetration, and improved charged effects."):format(eff.power, eff.penetration) end,
type = "mental",
subtype = { lightning=true, mind=true },
subtype = { lightning=true },
status = "beneficial",
parameters = { power=10, penetration = 0 },
activate = function(self, eff)
......@@ -3208,3 +3208,95 @@ newEffect{
self.damage_shield_absorb_max = nil
end,
}
newEffect{
name = "PSIONIC_MAELSTROM", image = "talents/static_net.png",
desc = "Psionic Maelstrom",
long_desc = function(self, eff) return ("This creature is standing in the eye of a powerful storm of psionic forces."):format() end,
type = "mental",
subtype = { psionic=true },
status = "beneficial",
parameters = { },
on_gain = function(self, eff) return nil, nil end,
on_lose = function(self, eff) return nil, nil end,
activate = function(self, eff)
eff.dir = 0--rng.range(0, 7)
end,
deactivate = function(self, eff)
end,
on_timeout = function(self, eff)
local tg = {type="beam", range=4, selffire=false}
local x, y
if eff.kinetic then
x = self.x+math.modf(4*math.sin(math.pi*eff.dir/4))
y = self.y+math.modf(4*math.cos(math.pi*eff.dir/4))
self:project(tg, x, y, engine.DamageType.PHYSICAL, eff.dam, nil)
local _ _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "matter_beam", {tx=x-self.x, ty=y-self.y})
end
if eff.charged then
x = self.x+math.modf(4*math.sin(math.pi*(eff.dir+4)/4))
y = self.y+math.modf(4*math.cos(math.pi*(eff.dir+4)/4))
self:project(tg, x, y, engine.DamageType.LIGHTNING, eff.dam, nil)
local _ _, x, y = self:canProject(tg, x, y)
if core.shader.active() then game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "lightning_beam", {tx=x-self.x, ty=y-self.y}, {type="lightning"})
else game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "lightning_beam", {tx=x-self.x, ty=y-self.y})
end
end
if eff.thermal then
x = self.x+math.modf(4*math.sin(math.pi*(eff.dir+2)/4))
y = self.y+math.modf(4*math.cos(math.pi*(eff.dir+2)/4))
self:project(tg, x, y, engine.DamageType.FIRE, eff.dam, nil)
local _ _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "flamebeam", {tx=x-self.x, ty=y-self.y})
x = self.x+math.modf(4*math.sin(math.pi*(eff.dir+6)/4))
y = self.y+math.modf(4*math.cos(math.pi*(eff.dir+6)/4))
self:project(tg, x, y, engine.DamageType.COLD, eff.dam, nil)
local _ _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "ice_beam", {tx=x-self.x, ty=y-self.y})
end
eff.dir = eff.dir+1
end,
}
newEffect{
name = "CAUGHT_LIGHTNING", image = "talents/transcendent_electrokinesis.png",
desc = "Caught Lightning",
long_desc = function(self, eff) return ("Lightning Catcher has caught energy and is empowering you for +%d%% lightning damage and +%d to all stats."):format((eff.dur+1)*5, eff.dur+1) end,
type = "mental",
subtype = { lightning=true },
status = "beneficial",
parameters = { },
on_merge = function(self, old_eff, new_eff)
old_eff.dur = old_eff.dur + new_eff.dur
return old_eff
end,
activate = function(self, eff)
eff.lightning = self:addTemporaryValue("inc_damage", {[DamageType.LIGHTNING]=eff.dur*5})
eff.stats = self:addTemporaryValue("inc_stats", {
[Stats.STAT_STR] = eff.dur,
[Stats.STAT_DEX] = eff.dur,
[Stats.STAT_CON] = eff.dur,
[Stats.STAT_MAG] = eff.dur,
[Stats.STAT_WIL] = eff.dur,
[Stats.STAT_CUN] = eff.dur,
})
end,
deactivate = function(self, eff)
self:removeTemporaryValue("inc_damage", eff.lightning)
self:removeTemporaryValue("inc_stats", eff.stats)
end,
on_timeout = function(self, eff)
self:removeTemporaryValue("inc_damage", eff.lightning)
self:removeTemporaryValue("inc_stats", eff.stats)
eff.lightning = self:addTemporaryValue("inc_damage", {[DamageType.LIGHTNING]=eff.dur*5})
eff.stats = self:addTemporaryValue("inc_stats", {
[Stats.STAT_STR] = eff.dur,
[Stats.STAT_DEX] = eff.dur,
[Stats.STAT_CON] = eff.dur,
[Stats.STAT_MAG] = eff.dur,
[Stats.STAT_WIL] = eff.dur,
[Stats.STAT_CUN] = eff.dur,
})
end,
}
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