Skip to content
Snippets Groups Projects
Commit 8e6656e2 authored by dg's avatar dg
Browse files

Changed doomed's Dark Vision to only add damage bonus inside Creeping Darkness

Changed hate lost per turn (slower at higher levels of hate, faster at lower levels)
Fixed some line of sight issues with doomed's Feed
Added cursed Strife talent tree
Added doomed Primal Magic talent tree
Added cursed/doomed Fateful Aura talent tree
Improved a few cursed/doomed particle effects for smaller tiles
Balance adjustments in cursed/doomed trees
Fixed NPC "The Mouth" to support pinning correctly


git-svn-id: http://svn.net-core.org/repos/t-engine4@3831 51575b47-30f0-44d4-a5cc-537603b46e54
parent e29d4eab
No related branches found
No related tags found
No related merge requests found
Showing
with 446 additions and 32 deletions
......@@ -253,7 +253,7 @@ function _M:actBase()
-- Hate decay
if self:knowTalent(self.T_HATE_POOL) and self.hate > 0 then
-- hate loss speeds up as hate increases
local hateChange = -math.max(0.02, 0.07 * math.pow(self.hate / 10, 2))
local hateChange = -math.max(0.02, 0.07 * math.pow(self.hate / 10, 1.5))
self:incHate(hateChange)
end
......@@ -306,6 +306,11 @@ function _M:actBase()
local t = self:getTalentFromId(self.T_UNSEEN_FORCE)
t.do_unseenForce(self, t)
end
-- this handles doomed arcane bolts turn based effects
if self.arcaneBolts then
local t = self:getTalentFromId(self.T_ARCANE_BOLTS)
t.do_arcaneBolts(self, t)
end
-- this handles Door to the Past random anomalies
if self:isTalentActive(self.T_DOOR_TO_THE_PAST) then
local t = self:getTalentFromId(self.T_DOOR_TO_THE_PAST)
......@@ -551,6 +556,11 @@ function _M:move(x, y, force)
end
end end
end
if moved and self:knowTalent(self.T_CURSED_TOUCH) then
local t = self:getTalentFromId(self.T_CURSED_TOUCH)
t.curseFloor(self, t, x, y)
end
if moved and self:isTalentActive(self.T_BODY_OF_STONE) then
self:forceUseTalent(self.T_BODY_OF_STONE, {ignore_energy=true})
......@@ -1173,13 +1183,13 @@ function _M:onTakeHit(value, src)
end
end
end
if src and src.knowTalent and src:knowTalent(src.T_HATE_POOL) then
if src and (src.hate_per_powerful_hit or 0) > 0 and src.knowTalent and src:knowTalent(src.T_HATE_POOL) then
local hateGain = 0
local hateMessage
if value / src.max_life > 0.33 then
-- you deliver a big hit
hateGain = hateGain + 0.4
hateGain = hateGain + src.hate_per_powerful_hit
hateMessage = "#F53CBE#Your powerful attack feeds your madness!"
end
......@@ -1822,6 +1832,12 @@ end
--- Call when an object is added
function _M:onAddObject(o)
-- curse the item
if self:knowTalent(self.T_CURSED_TOUCH) and not o.cursed_touch then
local t = self:getTalentFromId(self.T_CURSED_TOUCH)
t.curseItem(self, t, o)
end
engine.interface.ActorInventory.onAddObject(self, o)
self:checkEncumbrance()
......@@ -2621,6 +2637,55 @@ function _M:resetCanSeeCache()
setmetatable(self.can_see_cache, {__mode="k"})
end
--- Does the actor have LOS to the target
function _M:hasLOS(x, y, what)
if not x or not y then return false, self.x, self.y end
what = what or "block_sight"
local lx, ly
if what == "block_sight" then
local darkVisionRange
if self:knowTalent(self.T_DARK_VISION) then
local t = self:getTalentFromId(self.T_DARK_VISION)
darkVisionRange = self:getTalentRange(t)
end
local l = line.new(self.x, self.y, x, y)
local inCreepingDark, lastX, lastY = false
lx, ly = l()
while lx and ly do
if game.level.map:checkAllEntities(lx, ly, "block_sight") then
if darkVisionRange and game.level.map:checkAllEntities(lx, ly, "creepingDark") then
inCreepingDark = true
else
break
end
end
if inCreepingDark and darkVisionRange and core.fov.distance(self.x, self.y, lx, ly) > darkVisionRange then
lx, ly = lastX or lx, lastY or ly
break
end
lastX, lastY = lx, ly
lx, ly = l()
end
else
local l = line.new(self.x, self.y, x, y)
lx, ly = l()
while lx and ly do
if game.level.map:checkAllEntities(lx, ly, what) then break end
lx, ly = l()
end
end
-- Ok if we are at the end reset lx and ly for the next code
if not lx and not ly then lx, ly = x, y end
if lx == x and ly == y then return true, lx, ly end
return false, lx, ly
end
--- Can the target be applied some effects
-- @param what a string describing what is being tried
function _M:canBe(what)
......
......@@ -709,6 +709,7 @@ function _M:getTextualDesc(compare_with)
compare_fields(w, compare_with, field, "max_life", "%+.2f", "Maximum life: ")
compare_fields(w, compare_with, field, "max_mana", "%+.2f", "Maximum mana: ")
compare_fields(w, compare_with, field, "max_stamina", "%+.2f", "Maximum stamina: ")
compare_fields(w, compare_with, field, "max_hate", "%+.2f", "Maximum hate: ")
compare_fields(w, compare_with, field, "max_air", "%+.2f", "Maximum air capacity: ")
compare_fields(w, compare_with, field, "combat_spellpower", "%+d", "Spellpower: ")
......
......@@ -221,6 +221,15 @@ function _M:act()
-- Clean log flasher
-- game.flash:empty()
-- update feed immediately before the player moves for best visual consistency (this is not perfect but looks much better than updating mid-move)
if self:hasEffect(self.EFF_FEED) then
self.tempeffect_def[self.EFF_FEED].updateFeed(self, self:hasEffect(self.EFF_FEED))
elseif self:hasEffect(self.EFF_FED_UPON) then
local fed_upon_eff = self:hasEffect(self.EFF_FED_UPON)
fed_upon_eff.src.tempeffect_def[fed_upon_eff.src.EFF_FEED].updateFeed(fed_upon_eff.src, fed_upon_eff.src:hasEffect(self.EFF_FEED))
end
-- Resting ? Running ? Otherwise pause
if not self:restStep() and not self:runStep() and self.player then
game.paused = true
......@@ -344,24 +353,8 @@ function _M:playerFOV()
local range = self:getTalentRange(t)
self:computeFOV(range, "block_sense", function(x, y)
local actor = game.level.map(x, y, game.level.map.ACTOR)
if actor then
-- modified actor:hasLOS()
local l = line.new(self.x, self.y, x, y)
local lx, ly = l()
while lx and ly do
if game.level.map:checkAllEntities(lx, ly, "block_sight") then
if not game.level.map:checkAllEntities(lx, ly, "creepingDark") then break end
print("see creepingDark")
end
lx, ly = l()
end
-- Ok if we are at the end reset lx and ly for the next code
if not lx and not ly then lx, ly = x, y end
if lx == x and ly == y then
game.level.map.seens(x, y, 0.6)
end
if actor and self:hasLOS(x, y) then
game.level.map.seens(x, y, 0.6)
end
end, true, true, true)
end
......
......@@ -521,6 +521,10 @@ function _M:combatArmor()
if self:knowTalent(self.T_CARBON_SPIKES) and self:isTalentActive(self.T_CARBON_SPIKES) then
add = add + self.carbon_armor
end
if self:knowTalent(self.T_PRIMAL_SKIN) then
local t = self:getTalentFromId(self.T_PRIMAL_SKIN)
add = add + t.getArmor(self, t)
end
return self.combat_armor + add
end
......
......@@ -59,7 +59,10 @@ newBirthDescriptor{
["cursed/gloom"]={true, 0.0},
["cursed/slaughter"]={true, 0.0},
["cursed/endless-hunt"]={true, 0.0},
["cursed/strife"]={true, 0.0},
["cursed/cursed-form"]={true, 0.0},
["cursed/fateful-aura"]={true, 0.0},
["cursed/unyielding"]={true, 0.0},
["technique/combat-training"]={true, 0.3},
["cunning/survival"]={false, 0.0},
["cursed/rampage"]={false, 0.0},
......@@ -67,6 +70,7 @@ newBirthDescriptor{
},
talents = {
[ActorTalents.T_UNNATURAL_BODY] = 1,
[ActorTalents.T_CURSED_TOUCH] = 1,
[ActorTalents.T_GLOOM] = 1,
[ActorTalents.T_SLASH] = 1,
[ActorTalents.T_WEAPONS_MASTERY] = 1
......@@ -106,12 +110,15 @@ newBirthDescriptor{
["cursed/punishments"]={true, 0.3},
["cursed/shadows"]={true, 0.3},
["cursed/darkness"]={true, 0.3},
["cursed/primal-magic"]={true, 0.3},
["cursed/cursed-form"]={true, 0.0},
["cursed/fateful-aura"]={true, 0.0},
["cunning/survival"]={false, 0.0},
["cursed/dark-figure"]={false, 0.0},
},
talents = {
[ActorTalents.T_UNNATURAL_BODY] = 1,
[ActorTalents.T_CURSED_TOUCH] = 1,
[ActorTalents.T_FEED] = 1,
[ActorTalents.T_WILLFUL_STRIKE] = 1,
},
......
......@@ -62,18 +62,29 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
return 0
end
-- dark vision increases damage done in the dark
if src.knowTalent and src:knowTalent(src.T_DARK_VISION) then
-- dark vision increases damage done in creeping dark
if src and src.knowTalent and src:knowTalent(src.T_DARK_VISION) then
local t = src:getTalentFromId(src.T_DARK_VISION)
local damageIncrease = t.getDamageIncrease(src, t)
if damageIncrease > 0
and not game.level.map.lites(x, y) -- not lit
and src and src.x and src.y
and core.fov.distance(src.x, src.y, target.x, target.y) > (src.lite or 0) -- outside of lite radius
and game.level.map:checkAllEntities(x, y, "creepingDark") then -- creeping dark square
dam = dam + (dam * damageIncrease / 100)
game.logPlayer(src, "You strike in the darkness. (+%d damage)", damageIncrease)
end
end
if src and src.knowTalent and src:knowTalent(src.T_DARK_VISION)
and src.x and src.y
and game.level.map:checkAllEntities(x, y, "creepingDark") then
local t = src:getTalentFromId(src.T_DARK_VISION)
local damageIncrease = t.getDamageIncrease(src, t)
if damageIncrease > 0 and core.fov.distance(src.x, src.y, target.x, target.y) <= src:getTalentRange(t) then
dam = dam + (dam * damageIncrease / 100)
game.logPlayer(src, "You strike in the darkness. (+%d damage)", damageIncrease)
end
end
-- Static reduce damage for psionic kinetic shield
if target.isTalentActive and target:isTalentActive(target.T_KINETIC_SHIELD) then
......@@ -1454,7 +1465,11 @@ newDamageType{
local realdam = DamageType:get(DamageType.PHYSICAL).projector(src, x, y, DamageType.PHYSICAL, dam.dam)
if target and realdam > 0 then
local heal = realdam * (dam.healfactor or 1)
-- cannot be reduced
local temp = src.healing_factor
src.healing_factor = 1
src:heal(heal)
src.healing_factor = temp
game.logSeen(target, "%s consumes %d life from %s!", src.name:capitalize(), heal, target.name)
end
end,
......
-- 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
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
local Talents = require "engine.interface.ActorTalents"
newEntity{ name = "arm healing factor", weighting = 4, copy = { wielder = { healing_factor = resolvers.mbonus_material(30, 15) }, }, }
newEntity{ name = "arm max life", weighting = 2, copy = { wielder = { max_life = resolvers.mbonus_material(60, 40) }, }, }
newEntity{ name = "arm life regen", weighting = 2, copy = { wielder = { life_regen = resolvers.mbonus_material(15, 5, function(e, v) v=v/10 return 0, v end) }, }, }
newEntity{ name = "arm combat armor", weighting = 2, copy = { wielder = { combat_armor = resolvers.mbonus_material(8, 2), }, }, }
newEntity{ name = "arm res darkness", weighting = 3, copy = { wielder = { resists={ [DamageType.DARKNESS] = resolvers.mbonus_material(40, 20) }, }, }, }
newEntity{ name = "arm res light", weighting = 3, copy = { wielder = { resists={ [DamageType.LIGHT] = resolvers.mbonus_material(40, 20) }, }, }, }
newEntity{ name = "arm res mind", weighting = 2, copy = { wielder = { resists={ [DamageType.MIND] = resolvers.mbonus_material(25, 15) }, }, }, }
newEntity{ name = "arm res arcane", weighting = 2, copy = { wielder = { resists={ [DamageType.ARCANE] = resolvers.mbonus_material(25, 15) }, }, }, }
newEntity{ name = "arm hit darkness", weighting = 4, copy = { wielder = { on_melee_hit={ [DamageType.DARKNESS] = resolvers.mbonus_material(25, 5) } }, }, }
newEntity{ name = "arm hit mind", weighting = 2, copy = { wielder = { on_melee_hit={ [DamageType.MIND] = resolvers.mbonus_material(25, 5) } }, }, }
newEntity{name = "arm hit arcane", weighting = 2, copy = { wielder = { on_melee_hit={ [DamageType.ARCANE] = resolvers.mbonus_material(25, 5) } }, }, }
-- 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
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
local Talents = require "engine.interface.ActorTalents"
newEntity{ name = "ben str", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_STR] = resolvers.mbonus_material(4, 1) }, }, }, }
newEntity{ name = "ben dex", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_DEX] = resolvers.mbonus_material(4, 1) }, }, }, }
newEntity{ name = "ben mag", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_MAG] = resolvers.mbonus_material(4, 1) }, }, }, }
newEntity{ name = "ben wil", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_WIL] = resolvers.mbonus_material(4, 1) }, }, }, }
newEntity{ name = "ben cun", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_CUN] = resolvers.mbonus_material(4, 1) }, }, }, }
newEntity{ name = "ben con", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_CON] = resolvers.mbonus_material(4, 1) }, }, }, }
--newEntity{ name = "ben healing factor", weighting = 1, copy = { wielder = { healing_factor = resolvers.mbonus_material(10, 5, function(e, v) v=v/100 return 0, v end) }, }, }
newEntity{ name = "ben mentalresist", weighting = 1, copy = { wielder = { combat_mentalresist = resolvers.mbonus_material(4, 2) }, }, }
newEntity{ name = "ben physresist", weighting = 1, copy = { wielder = { combat_physresist = resolvers.mbonus_material(4, 2) }, }, }
newEntity{ name = "ben spellresist", weighting = 1, copy = { wielder = { combat_spellresist = resolvers.mbonus_material(4, 2) }, }, }
newEntity{ name = "ben max hate", weighting = 2, copy = { wielder = { max_hate = 1 }, }, }
\ 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
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
local Talents = require "engine.interface.ActorTalents"
newEntity{ name="det str", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_STR] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end), }, }, }, }
newEntity{ name="det dex", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_DEX] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det mag", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_MAG] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det wil", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_WIL] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det cun", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_CUN] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det con", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_CON] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det lck", weighting = 1, copy = { wielder = { inc_stats = { [Stats.STAT_LCK] = resolvers.mbonus_material(4, 1, function(e, v) return 0, -v end) }, }, }, }
newEntity{ name="det res light", weighting = 2, copy = { wielder = { resists={ [DamageType.LIGHT] = -5 }, }, }, }
newEntity{ name="det res fire", weighting = 2, copy = { wielder = { resists={ [DamageType.FIRE] = -5 }, }, }, }
newEntity{ name="det res arcane", weighting = 2, copy = { wielder = { resists={ [DamageType.ARCANE] = -5 }, }, }, }
--newEntity{ name="det healing factor", weighting = 1, copy = { wielder = { healing_factor = resolvers.mbonus_material(10, 5, function(e, v) v=-v/100 return 0, v end) }, }, }
newEntity{ name="det mentalresist", weighting = 1, copy = { wielder = { combat_mentalresist = resolvers.mbonus_material(8, 3, function(e, v) return 0, -v end) }, }, }
newEntity{ name="det physresist", weighting = 1, copy = { wielder = { combat_physresist = resolvers.mbonus_material(8, 3, function(e, v) return 0, -v end) }, }, }
newEntity{ name="det spellresist", weighting = 1, copy = { wielder = { combat_spellresist = resolvers.mbonus_material(8, 3, function(e, v) return 0, -v end) }, }, }
newEntity{ name="det max air", weighting = 1, copy = { wielder = { max_air = -20 }, }, }
newEntity{
name = "det fumble",
weighting = 6,
item_type="weapon",
copy = {
combat = {
special_on_hit = {
desc="4% chance of fumbling your weapon when striking.",
fct=function(combat, who, target)
if not rng.percent(4) then return end
if not who:canBe("disarm") then return end
who:setEffect(who.EFF_DISARMED, 3, {})
game.logSeen(target, "%s fumbles the attack!", who.name:capitalize())
end
},
},
},
}
newEntity{
name = "det knockback",
weighting = 3,
item_type="weapon",
copy = {
combat = {
special_on_hit = {
desc="4% chance of being knocked back when striking.",
fct=function(combat, who, target)
if not rng.percent(4) then return end
if not who:canBe("knockback") then return end
who:knockback(target.x, target.y, 3)
game.logSeen(target, "%s flies back from the strike!", who.name:capitalize())
end
},
},
}
}
newEntity{
name = "det teleport",
weighting = 3,
item_type="weapon",
copy = {
combat = {
special_on_hit = {
desc="4% chance of teleporting a short distance when striking.",
fct=function(combat, who, target)
if not rng.percent(4) then return end
if not who:canBe("teleport") then return end
who:teleportRandom(who.x, who.y, 10)
game.logSeen(target, "%s strikes then suddenly disappears!", who.name:capitalize())
end
},
},
},
}
newEntity{
name = "det heal",
weighting = 3,
item_type="weapon",
copy = {
combat = {
special_on_hit = {
desc="4% chance of healing the target by 50% of their maximum life.",
fct=function(combat, who, target)
if not rng.percent(4) then return end
if target then
local dam = math.min(target.max_life - target.life, target.max_life / 2)
if dam > 0 then
target:heal(dam)
game.logSeen(target, "%s bestows %d life onto %s!", who.name:capitalize(), dam, target.name)
end
end
end
},
},
},
}
\ 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
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
local Talents = require "engine.interface.ActorTalents"
newEntity{ name = "sta dam darkness", weighting = 4, copy = { wielder={ inc_damage = { [DamageType.DARKNESS] = resolvers.mbonus_material(20, 5), } }, }, }
newEntity{ name = "sta dam mind", weighting = 3, copy = { wielder={ inc_damage = { [DamageType.MIND] = resolvers.mbonus_material(20, 5), } }, }, }
newEntity{ name = "sta dam arcane", weighting = 2, copy = { wielder={ inc_damage = { [DamageType.ARCANE] = resolvers.mbonus_material(15, 4), } }, }, }
newEntity{ name = "sta dam physical", weighting = 2, copy = { wielder={ inc_damage = { [DamageType.PHYSICAL] = resolvers.mbonus_material(15, 4), } }, }, }
newEntity{ name = "sta pen darkness", weighting = 2, copy = { wielder={ resists_pen = { [DamageType.DARKNESS]= 40 }, } }, }
newEntity{ name = "sta pen mind", weighting = 2, copy = { wielder={ resists_pen = { [DamageType.MIND]= 40 }, } }, }
newEntity{ name = "sta pen arcane", weighting = 2, copy = { wielder={ resists_pen = { [DamageType.ARCANE]= 40 }, } }, }
newEntity{ name = "sta pen physical", weighting = 2, copy = { wielder={ resists_pen = { [DamageType.PHYSICAL]= 40 }, } }, }
newEntity{ name = "sta darkness", weighting = 2, copy = { wielder = { talents_types_mastery = { ["cursed/darkness"] = 0.2, } }, }, }
newEntity{ name = "sta force of will", weighting = 2, copy = { wielder = { talents_types_mastery = { ["cursed/force-of-will"] = 0.2, } }, }, }
newEntity{ name = "sta punishments", weighting = 2, copy = { wielder = { talents_types_mastery = { ["cursed/punishments"] = 0.2, } }, }, }
newEntity{ name = "sta shadows", weighting = 2, copy = { wielder = { talents_types_mastery = { ["cursed/shadows"] = 0.2, } }, }, }
newEntity{ name = "sta primal magic", weighting = 2, copy = { wielder = { talents_types_mastery = { ["cursed/primal-magic"] = 0.2, } }, }, }
\ 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
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
local Talents = require "engine.interface.ActorTalents"
newEntity{ name = "wep proj darkness", weighting = 3, copy = { combat = { melee_project={[DamageType.DARKNESS] = resolvers.mbonus_material(45, 8)} }, }, }
newEntity{ name = "wep proj arcane", weighting = 1, copy = { combat = { melee_project={[DamageType.ARCANE] = resolvers.mbonus_material(45, 8)} }, }, }
newEntity{ name = "wep res physical", weighting = 1, copy = { wielder={ resists_pen = { [DamageType.PHYSICAL]= 25 }, }, }, }
newEntity{ name = "wep slaughter", weighting = 3, copy = { wielder = { talents_types_mastery = { ["cursed/slaughter"] = 0.2, }, }, }, }
newEntity{ name = "wep endless hunt", weighting = 3, copy = { wielder = { talents_types_mastery = { ["cursed/endless-hunt"] = 0.2, }, }, }, }
newEntity{ name = "wep strife", weighting = 3, copy = { wielder = { talents_types_mastery = { ["cursed/strife"] = 0.2, }, }, }, }
newEntity{ name = "wep life leech", weighting = 1, copy = { wielder = {
life_leech_chance = resolvers.mbonus_material(8, 4),
life_leech_value = 10,
}, }, }
newEntity{
name = "wep hate per strike",
weighting = 6,
item_type="weapon",
copy = {
combat = {
special_on_hit = {
desc="Adds 0.03 hate per strike.",
fct=function(combat, who, target)
who:incHate(0.03)
end
},
},
},
}
newEntity{ name = "wep bleeding edge", weighting = 3, copy = { combat = { talent_on_hit = { [Talents.T_BLEEDING_EDGE] = {level=3, chance=5} }, }, }, }
newEntity{ name = "wep creeping darkness", weighting = 3, copy = { combat = { talent_on_hit = { [Talents.T_CREEPING_DARKNESS] = {level=3, chance=5} }, }, }, }
\ No newline at end of file
......@@ -35,7 +35,7 @@ return { generator = function()
return {
life = 5,
size = rng.range(4, 6), sizev = -0.4, sizea = 0,
size = rng.range(6, 8), sizev = -0.4, sizea = 0,
x = r * math.cos(angle) + math.cos(rightAngle) * offset, xv = 0, xa = 0,
y = r * math.sin(angle) + math.sin(rightAngle) * offset, yv = 0, ya = 0,
......
......@@ -28,7 +28,7 @@ local first = true
return { generator = function()
local life = rng.range(3, 8)
local size = rng.float(2, 4)
local size = rng.float(3, 5)
local alpha = rng.range(80, 160) / 255
local moveAngle = angle + math.rad(rng.range(-25, 25))
local offsetDistance = engine.Map.tile_w * 0.7
......
......@@ -31,7 +31,7 @@ return { generator = function()
return {
trail = 1,
life = 30,
size = 12, sizev = -0.3, sizea = 0,
size = 15, sizev = -0.3, sizea = 0,
x = r * math.cos(a), xv = 0, xa = 0,
y = r * math.sin(a), yv = 0, ya = 0,
......
-- ToME - Tales of Middle-Earth
-- 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
base_size = 32
local first = true
return { generator = function()
return {
life = 60,
size = 1, sizev = 0, sizea = 0.3,
x = 0, xv = 0, xa = 0,
y = 0, yv = 0, ya = 0,
dir = 0, dirv = 0, dira = 0,
vel = 0, velv = 0, vela = 0,
r = 255/255, rv = 0, ra = 0,
g = 242/255, gv = 0, ga = 0,
b = 128/255, gv = 0, ga = 0,
a = 255/255, av = -1/60, aa = 0,
}
end, },
function(self)
if first then self.ps:emit(1) first = false end
end,
1
\ No newline at end of file
......@@ -48,4 +48,4 @@ return {
[[#.c#.c#.c#.c#.c#.c#.c%.cX]],
[[#########################]],
}
\ No newline at end of file
}
\ No newline at end of file
......@@ -82,4 +82,4 @@ return {
[[.##########~~~~~A~~~~~~~~~~~~##########.]],
[[........................................]],
}
\ No newline at end of file
}
\ No newline at end of file
......@@ -62,4 +62,4 @@ return {
[[#########~~h#####LL##]],
[[#####################]],
}
\ No newline at end of file
}
\ No newline at end of file
......@@ -61,4 +61,4 @@ return {
[[#########...#########]],
[[#####################]],
}
\ No newline at end of file
}
\ No newline at end of file
......@@ -63,4 +63,4 @@ return {
[[%%%%%%###u%*###%%%%%%]],
[[%%%%%%%%#####%%%%%%%%]],
}
\ No newline at end of file
}
\ No newline at end of file
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