Skip to content
Snippets Groups Projects
Commit 29c7f5ce authored by dg's avatar dg
Browse files

Ego generator will forbid an arcane/antimagic item and an arcane/nature one...

Ego generator will forbid an arcane/antimagic item and an arcane/nature one will be rarer (but still possible)


git-svn-id: http://svn.net-core.org/repos/t-engine4@4901 51575b47-30f0-44d4-a5cc-537603b46e54
parent 4e421a90
No related branches found
No related tags found
No related merge requests found
......@@ -346,6 +346,9 @@ local pick_ego = function(self, level, e, egos_list, type, picked_etype, etype,
local egos = level:getEntitiesList(type.."/"..e.egos..":"..etype)
if not egos then egos = self:generateEgoEntities(level, type, etype, e.egos, e.__CLASSNAME) end
print("<<",self, level, type, etype, e, ego_filter, egos_list, picked_etype)
if self.ego_filter then ego_filter = self.ego_filter(self, level, type, etype, e, ego_filter, egos_list, picked_etype) end
-- Filter the egos if needed
if ego_filter then
local list = {}
......
......@@ -331,6 +331,7 @@ function _M:loaded()
Zone.default_filter = function(...) return self.state:defaultEntityFilter(...) end
Zone.alter_filter = function(...) return self.state:entityFilterAlter(...) end
Zone.post_filter = function(...) return self.state:entityFilterPost(...) end
Zone.ego_filter = function(...) return self.state:egoFilter(...) end
self.uiset = (require("mod.class.uiset."..(config.settings.tome.uiset_mode or "Minimalist"))).new()
......
......@@ -1058,6 +1058,49 @@ function _M:entityFilterPost(zone, level, type, e, filter)
return e
end
function _M:egoFilter(zone, level, type, etype, e, ego_filter, egos_list, picked_etype)
if type ~= "object" then return ego_filter end
if not ego_filter then ego_filter = {}
else ego_filter = table.clone(ego_filter, true) end
local arcane_check = false
local nature_check = false
local am_check = false
for i = 1, #egos_list do
local e = egos_list[i]
if e.power_source and e.power_source.arcane then arcane_check = true end
if e.power_source and e.power_source.nature then nature_check = true end
if e.power_source and e.power_source.antimagic then am_check = true end
end
local fcts = {}
if arcane_check then
fcts[#fcts+1] = function(ego) return not ego.power_source or not ego.power_source.nature or rng.percent(20) end
fcts[#fcts+1] = function(ego) return not ego.power_source or not ego.power_source.antimagic end
end
if nature_check then
fcts[#fcts+1] = function(ego) return not ego.power_source or not ego.power_source.arcane or rng.percent(20) end
end
if am_check then
fcts[#fcts+1] = function(ego) return not ego.power_source or not ego.power_source.arcane end
end
if #fcts > 0 then
local old = ego_filter.special
ego_filter.special = function(ego)
for i = 1, #fcts do
if not fcts[i](ego) then return false end
end
if old and not old(ego) then return false end
return true
end
end
return ego_filter
end
--------------------------------------------------------------
-- Random zones
--------------------------------------------------------------
......
......@@ -1963,3 +1963,30 @@ newDamageType{
end
end,
}
newDamageType{
name = "manaburn", type = "MANABURN",
projector = function(src, x, y, type, dam)
local target = game.level.map(x, y, Map.ACTOR)
if target then
local mana = dam * 2
local vim = dam
local positive = dam / 2
local negative = dam / 2
mana = math.min(target:getMana(), mana)
vim = math.min(target:getVim(), vim)
positive = math.min(target:getPositive(), positive)
negative = math.min(target:getNegative(), negative)
target:incMana(-mana)
target:incVim(-vim)
target:incPositive(-positive)
target:incNegative(-negative)
local dam = math.max(mana, vim * 2, positive * 4, negative * 4) * 1.3
return DamageType:get(DamageType.ARCANE).projector(src, x, y, DamageType.ARCANE, dam)
end
return 0
end,
}
......@@ -523,23 +523,17 @@ newEntity{
},
}
--[[ Todo: make it balanced
newEntity{
power_source = {nature=true},
name = "insatiable ", prefix=true, instant_resolve=true,
keywords = {insatiable=true},
level_range = {1, 50},
power_source = {nature=true, antimagic=true},
name = "manaburning ", prefix=true, instant_resolve=true,
keywords = {manaburning=true},
level_range = {10, 50},
greater_ego = 1,
rarity = 60,
rarity = 25,
cost = 40,
wielder = {
resource_leech_chance = resolvers.mbonus_material(4, 1, function(e, v) v=v*10 return 0, v end),
resource_leech_value = resolvers.mbonus_material(15, 5),
},
combat = {
melee_project = {
[DamageType.NATURE] = resolvers.mbonus_material(25, 5),
[DamageType.MANABURN] = resolvers.mbonus_material(50, 15),
},
},
}
]]
......@@ -136,23 +136,7 @@ newTalent{
if not target then return end
local base = self:combatTalentMindDamage(t, 20, 230)
local mana = base * 2
local vim = base
local positive = base / 2
local negative = base / 2
mana = math.min(target:getMana(), mana)
vim = math.min(target:getVim(), vim)
positive = math.min(target:getPositive(), positive)
negative = math.min(target:getNegative(), negative)
target:incMana(-mana)
target:incVim(-vim)
target:incPositive(-positive)
target:incNegative(-negative)
local dam = math.max(mana, vim * 2, positive * 4, negative * 4) * 1.3
DamageType:get(DamageType.ARCANE).projector(self, px, py, DamageType.ARCANE, dam)
DamageType:get(DamageType.MANABURN).projector(self, px, py, DamageType.MANABURN, base)
end, nil, {type="slime"})
game:playSoundNear(self, "talents/heal")
return true
......
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