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

cloth, object reqs

git-svn-id: http://svn.net-core.org/repos/t-engine4@163 51575b47-30f0-44d4-a5cc-537603b46e54
parent c2c435d7
No related branches found
No related tags found
No related merge requests found
......@@ -126,3 +126,29 @@ end
function _M:getSubtypeOrder()
return self.subtype or ""
end
--- Describe requirements
function _M:getRequirementDesc(who)
local req = rawget(self, "require")
if not req then return nil end
local str = "Requires:\n"
if req.stat then
for s, v in pairs(req.stat) do
local c = (who:getStat(s) >= v) and "#00ff00#" or "#ff0000#"
str = str .. ("- %s%s %d\n"):format(c, who.stats_def[s].name, v)
end
end
if req.level then
local c = (who.level >= req.level) and "#00ff00#" or "#ff0000#"
str = str .. ("- %sLevel %d\n"):format(c, req.level)
end
if req.talent then
for _, tid in ipairs(req.talent) do
local c = who:knowTalent(tid) and "#00ff00#" or "#ff0000#"
str = str .. ("- %sTalent %s\n"):format(c, who:getTalentFromId(tid).name)
end
end
return str
end
......@@ -142,13 +142,41 @@ function _M:showPickupFloor(title, filter, action)
game:registerDialog(d)
end
--- Can we wear this item?
function _M:canWearObject(o)
local req = rawget(o, "require")
-- Check prerequisites
if req then
-- Obviously this requires the ActorStats interface
if req.stat then
for s, v in pairs(req.stat) do
if self:getStat(s) < v then return nil, "not enough stat" end
end
end
if req.level and self.level < req.level then
return nil, "not enough levels"
end
if req.talent then
for _, tid in ipairs(req.talent) do
if not self:knowTalent(tid) then return nil, "missing dependency" end
end
end
end
end
--- Wear/wield an item
function _M:wearObject(o, replace, vocal)
local inven = o:wornInven()
if not o then
if not inven then
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
return false
end
if self:addObject(inven, o) then
if vocal then game.logSeen(self, "%s wears: %s.", self.name:capitalize(), o:getName()) end
return true
......
......@@ -78,6 +78,7 @@ function _M:newGame()
self.player.wild_x, self.player.wild_y = self.player.default_wilderness[2], self.player.default_wilderness[3]
self.player.current_wilderness = self.player.default_wilderness[1]
self:changeLevel(1)
self.player:resolve()
local ds = LevelupStatsDialog.new(self.player)
self:registerDialog(ds)
......
......@@ -61,6 +61,11 @@ function _M:getDesc()
end
local desc = { c..self:getName().."#FFFFFF#", self.desc }
local reqs = self:getRequirementDesc(game.player)
if reqs then
desc[#desc+1] = reqs
end
if self.combat then
local dm = {}
for stat, i in pairs(self.combat.dammod or {}) do
......
......@@ -14,6 +14,9 @@ newBirthDescriptor{
},
},
talents = { ActorTalents.T_STAMINA_POOL, },
copy = {
equipment = resolvers.equip{ {type="weapon", subtype="longsword"} },
},
}
newBirthDescriptor{
......@@ -46,6 +49,9 @@ newBirthDescriptor{
},
},
talents = { ActorTalents.T_MANA_POOL, },
copy = {
equipment = resolvers.equip{ {type="weapon", subtype="staff", name="elm staff"}, {type="armor", subtype="cloth", name="robe"} },
},
}
newBirthDescriptor{
......
newEntity{
define_as = "BASE_CLOTH_ARMOR",
slot = "BODY",
type = "armor", subtype="cloth",
display = "[", color=colors.SLATE,
encumber = 2,
rarity = 5,
desc = [[A cloth vestment. It offers no intrinsinc protection but can be enchanted.]],
}
newEntity{ base = "BASE_CLOTH_ARMOR",
name = "robe",
level_range = {1, 50},
cost = 0.5,
}
......@@ -2,6 +2,7 @@ load("/data/general/objects/potions.lua")
load("/data/general/objects/staves.lua")
load("/data/general/objects/swords.lua")
load("/data/general/objects/shields.lua")
load("/data/general/objects/cloth-armors.lua")
load("/data/general/objects/massive-armors.lua")
......
load("/data/general/objects/objects.lua")
......@@ -9,5 +9,9 @@ return {
map = {
class = "mod.class.generator.map.Wilderness",
},
object = {
class = "engine.generator.object.Random",
nb_object = {0,0},
},
}
}
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