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

items

git-svn-id: http://svn.net-core.org/repos/t-engine4@171 51575b47-30f0-44d4-a5cc-537603b46e54
parent a77d7de6
No related branches found
No related tags found
No related merge requests found
Showing
with 361 additions and 11 deletions
......@@ -148,6 +148,13 @@ function _M:canSee(actor)
return true, 100
end
local function gettable(base, name)
for w in name:gmatch("[^.]+") do
base = base[w]
end
return base
end
--- Computes a "temporary" value into a property
-- Example: You cant to give an actor a boost to life_regen, but you do not want it to be permanent<br/>
-- You cannot simply increase life_regen, so you use this method which will increase it AND
......@@ -168,6 +175,11 @@ function _M:addTemporaryValue(prop, v, noupdate)
-- Simple addition
self[prop] = (self[prop] or 0) + v
print("addTmpVal", prop, v)
elseif type(v) == "table" then
for k, e in pairs(v) do
self[prop][k] = (self[prop][k] or 0) + e
print("addTmpValTable", prop, k, e)
end
-- elseif type(v) == "boolean" then
-- -- False has precedence over true
-- if v == false then
......@@ -194,6 +206,10 @@ function _M:removeTemporaryValue(prop, id, noupdate)
if type(oldval) == "number" then
self[prop] = self[prop] - oldval
print("delTmpVal", prop, oldval)
elseif type(oldval) == "table" then
for k, e in pairs(oldval) do
self[prop][k] = self[prop][k] - e
end
-- elseif type(oldval) == "boolean" then
else
error("unsupported temporary value type: "..type(oldval))
......
......@@ -48,6 +48,8 @@ end
function _M:getInven(id)
if type(id) == "number" then
return self.inven[id]
elseif type(id) == "string" then
return self.inven[self["INVEN_"..id]]
else
return id
end
......@@ -166,12 +168,24 @@ function _M:canWearObject(o)
-- Check forbidden slot
if o.slot_forbid then
local inven = self.inven[o.slot_forbid]
local inven = self:getInven(o.slot_forbid)
-- If the object cant coexist with that inventory slot and it exists and is not empty, refuse wearing
if inven and #inven > 0 then
return nil
return nil, "cannot use currently due to an other worn object"
end
end
-- Check that we are not the forbidden slot of any other worn objects
for id, inven in pairs(self.inven) do
if self.inven_def[id].is_worn then
for i, wo in ipairs(inven) do
if wo.slot_forbid and wo.slot_forbid == o.slot then
return nil, "cannot use currently due to an other worn object"
end
end
end
end
return true
end
......@@ -182,8 +196,9 @@ function _M:wearObject(o, replace, vocal)
if vocal then game.logSeen(self, "%s is not wearable.", o:getName()) end
return false
end
if not self:canWearObject(o) then
if vocal then game.logSeen(self, "%s can not wear: %s.", self.name:capitalize(), o:getName()) end
local ok, err = self:canWearObject(o)
if not ok then
if vocal then game.logSeen(self, "%s can not wear: %s (%s).", self.name:capitalize(), o:getName(), err) end
return false
end
......
......@@ -68,6 +68,7 @@ function _M:getStat(stat, scale)
else
val = self.stats[stat]
end
val = util.bound(val, _M.stats_def[stat].min, _M.stats_def[stat].max)
if scale then
val = math.floor(val * scale / _M.stats_def[stat].max)
end
......
......@@ -51,6 +51,9 @@ function _M:init(t, no_default)
t.mana_rating = t.mana_rating or 10
t.stamina_rating = t.stamina_rating or 10
-- Resistances
t.resists = t.resists or {}
-- Default regen
t.mana_regen = t.mana_regen or 0.5
t.stamina_regen = t.stamina_renge or 0.5
......
......@@ -36,7 +36,8 @@ function _M:init(t, no_default)
self.max_mana=85
self.max_stamina=85
self.unused_stats = 6
self.unused_talents = 0
-- FIX
self.unused_talents = 6
self.move_others=true
self.lite = 4
......
......@@ -30,10 +30,11 @@ newBirthDescriptor{
},
stats = { str=3, con=2, dex=1, },
talents_types = {
["physical/1hweapon"]=true,
["physical/2hweapon"]=true,
["physical/shield"]=true,
["physical/1hweapon"]=true,
["physical/2hweapon"]=true,
["physical/dualweapon"]=true,
["physical/combat-training"]=true,
["physical/weapon-training"]=true,
},
}
......
......@@ -2,6 +2,10 @@
defaultProjector(function(src, x, y, type, dam)
local target = game.level.map(x, y, Map.ACTOR)
if target then
-- Reduce damage with resistance
local res = target.resists[type] or 0
dam = dam * (100 - res)
game.logSeen(target, "%s hits %s for #aaaaaa#%0.2f %s damage#ffffff#.", src.name:capitalize(), target.name, dam, DamageType:get(type).name)
local sx, sy = game.level.map:getTileToScreen(x, y)
if target:takeHit(dam, src) then
......
......@@ -7,7 +7,6 @@ newEntity{
encumber = 3,
rarity = 3,
desc = [[Massive two-handed swords.]],
egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
}
newEntity{ base = "BASE_GREATSWORD",
......
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
newEntity{
name = " of cunning",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_CUN] = resolvers.mbonus(8, 2) },
},
}
newEntity{
name = " of willpower",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_WIL] = resolvers.mbonus(8, 2) },
},
}
local Stats = require "engine.interface.ActorStats"
local DamageType = require "engine.DamageType"
newEntity{
name = " of see invisible",
level_range = {1, 20},
rarity = 4,
cost = 2,
wielder = {
see_invisible = resolvers.mbonus(20, 5),
},
}
newEntity{
name = " of invisibility",
level_range = {30, 40},
rarity = 4,
cost = 16,
wielder = {
invisible = resolvers.mbonus(10, 5),
},
}
newEntity{
name = " of regeneration",
level_range = {10, 20},
rarity = 10,
cost = 8,
wielder = {
life_regen = resolvers.mbonus(3, 1),
},
}
newEntity{
name = "energizing ", prefix=true,
level_range = {10, 20},
rarity = 8,
cost = 3,
wielder = {
mana_regen = resolvers.mbonus(3, 1),
},
}
newEntity{
name = " of accuracy",
level_range = {1, 30},
rarity = 6,
cost = 2,
wielder = {
combat_atk = resolvers.mbonus(15, 5),
},
}
newEntity{
name = " of defense",
level_range = {1, 30},
rarity = 6,
cost = 2,
wielder = {
combat_defense = resolvers.mbonus(15, 5),
},
}
newEntity{
name = " of fire resistance",
level_range = {10, 40},
rarity = 6,
cost = 2,
wielder = {
resists = { [DamageType.FIRE] = resolvers.mbonus(15, 20), }
},
}
newEntity{
name = " of cold resistance",
level_range = {10, 40},
rarity = 6,
cost = 2,
wielder = {
resists = { [DamageType.COLD] = resolvers.mbonus(15, 20), }
},
}
newEntity{
name = " of nature resistance",
level_range = {10, 40},
rarity = 6,
cost = 2,
wielder = {
resists = { [DamageType.NATURE] = resolvers.mbonus(15, 20), }
},
}
newEntity{
name = " of lightning resistance",
level_range = {10, 40},
rarity = 6,
cost = 2,
wielder = {
resists = { [DamageType.LIGHTNING] = resolvers.mbonus(15, 20), }
},
}
newEntity{
name = " of acid resistance",
level_range = {10, 40},
rarity = 6,
cost = 2,
wielder = {
resists = { [DamageType.ACID] = resolvers.mbonus(15, 20), }
},
}
newEntity{
name = " of spell resistance",
level_range = {1, 30},
rarity = 6,
cost = 2,
wielder = {
combat_spellresist = resolvers.mbonus(15, 5),
},
}
newEntity{
name = " of physical resistance",
level_range = {1, 30},
rarity = 6,
cost = 2,
wielder = {
combat_spellresist = resolvers.mbonus(15, 5),
},
}
newEntity{
name = " of strength",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_STR] = resolvers.mbonus(8, 2) },
},
}
newEntity{
name = " of dexterity",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_DEX] = resolvers.mbonus(8, 2) },
},
}
newEntity{
name = " of magic",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_MAG] = resolvers.mbonus(8, 2) },
},
}
newEntity{
name = " of constitution",
level_range = {1, 50},
rarity = 6,
cost = 4,
wielder = {
stats = { [Stats.STAT_CON] = resolvers.mbonus(8, 2) },
},
}
local Stats = require "engine.interface.ActorStats"
newEntity{
name = " of power",
level_range = {1, 50},
rarity = 4,
cost = 5,
wielder = {
combat_spellpower = resolvers.mbonus(30, 3),
},
}
newEntity{
name = "charged ", prefix=true,
level_range = {1, 50},
rarity = 3,
cost = 5,
wielder = {
max_mana = resolvers.mbonus(100, 10),
},
}
newEntity{
name = " of wizardry",
level_range = {25, 50},
rarity = 4,
cost = 5,
wielder = {
combat_spellpower = resolvers.mbonus(30, 3),
max_mana = resolvers.mbonus(100, 10),
stats = { [Stats.STAT_MAG] = resolvers.mbonus(5, 1), [Stats.STAT_WIL] = resolvers.mbonus(5, 1) },
},
}
local Talents = require "engine.interface.ActorTalents"
newEntity{
define_as = "BASE_HEAVY_ARMOR",
slot = "BODY",
type = "armor", subtype="heavy",
display = "[", color=colors.SLATE,
require = { talent = { Talents.T_HEAVY_ARMOUR_TRAINING }, },
encumber = 17,
rarity = 5,
desc = [[A suit of armour made of mail.]],
......
newEntity{
define_as = "BASE_RING",
slot = "FINGER",
type = "jewelry", subtype="ring",
display = "=",
encumber = 0.1,
rarity = 6,
desc = [[Rings can have magical properties.]],
-- Most rings are ego items
egos = "/data/general/objects/egos/rings.lua", egos_chance = resolvers.mbonus(30, 80),
}
newEntity{
define_as = "BASE_AMULET",
slot = "NECK",
type = "jewelry", subtype="amulet",
display = "=",
encumber = 0.1,
rarity = 8,
desc = [[Amulets can have magical properties.]],
egos = "/data/general/objects/egos/amulets.lua", egos_chance = resolvers.mbonus(30, 80),
}
newEntity{ base = "BASE_RING",
name = "copper ring", color = colors.UMBER,
level_range = {1, 10},
cost = 1,
}
newEntity{ base = "BASE_RING",
name = "steel ring", color = colors.SLATE,
level_range = {10, 20},
cost = 1,
}
newEntity{ base = "BASE_RING",
name = "gold ring", color = colors.YELLOW,
level_range = {20, 30},
cost = 1,
}
newEntity{ base = "BASE_RING",
name = "galvorn ring", color = {r=50, g=50, b=50},
level_range = {30, 40},
cost = 1,
}
newEntity{ base = "BASE_RING",
name = "mithril ring", color = colors.WHITE,
level_range = {40, 50},
cost = 1,
}
newEntity{ base = "BASE_AMULET",
name = "copper amulet", color = colors.UMBER,
level_range = {1, 10},
cost = 1,
}
newEntity{ base = "BASE_AMULET",
name = "steel amulet", color = colors.SLATE,
level_range = {10, 20},
cost = 1,
}
newEntity{ base = "BASE_AMULET",
name = "gold amulet", color = colors.YELLOW,
level_range = {20, 30},
cost = 1,
}
newEntity{ base = "BASE_AMULET",
name = "galvorn amulet", color = {r=50, g=50, b=50},
level_range = {30, 40},
cost = 1,
}
newEntity{ base = "BASE_AMULET",
name = "mithril amulet", color = colors.WHITE,
level_range = {40, 50},
cost = 1,
}
local Talents = require "engine.interface.ActorTalents"
newEntity{
define_as = "BASE_MASSIVE_ARMOR",
slot = "BODY",
type = "armor", subtype="massive",
display = "[", color=colors.SLATE,
require = { talent = { Talents.T_MASSIVE_ARMOUR_TRAINING }, },
encumber = 17,
rarity = 5,
desc = [[A suit of armour made of metal plates.]],
......
-- Usable stuff
load("/data/general/objects/potions.lua")
-- Jewelry stuff
load("/data/general/objects/jewelry.lua")
-- Weapons
load("/data/general/objects/staves.lua")
load("/data/general/objects/swords.lua")
......
......@@ -24,6 +24,7 @@ newEntity{ base = "BASE_SHIELD",
wielder = {
combat_armor = 2,
combat_def = 4,
fatigue = 6,
},
}
......@@ -40,6 +41,7 @@ newEntity{ base = "BASE_SHIELD",
wielder = {
combat_armor = 2,
combat_def = 6,
fatigue = 8,
},
}
......@@ -56,6 +58,7 @@ newEntity{ base = "BASE_SHIELD",
wielder = {
combat_armor = 2,
combat_def = 8,
fatigue = 12,
},
}
......@@ -72,6 +75,7 @@ newEntity{ base = "BASE_SHIELD",
wielder = {
combat_armor = 2,
combat_def = 10,
fatigue = 14,
},
}
......@@ -88,5 +92,6 @@ newEntity{ base = "BASE_SHIELD",
wielder = {
combat_armor = 3,
combat_def = 12,
fatigue = 14,
},
}
......@@ -6,7 +6,7 @@ newEntity{
encumber = 5,
rarity = 3,
desc = [[Staves designed for wielders of magic, by the greats of the art.]],
egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
egos = "/data/general/objects/egos/staves.lua", egos_chance = 100,--resolvers.mbonus(40, 5),
}
newEntity{ base = "BASE_STAFF",
......
......@@ -6,7 +6,7 @@ newEntity{
encumber = 3,
rarity = 3,
desc = [[Sharp, long, and deadly.]],
egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
-- egos = "/data/general/objects/egos/swords.lua", egos_chance = resolvers.mbonus(40, 5),
}
newEntity{ base = "BASE_LONGSWORD",
......
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