From df5318882516143584de2cb3a5c13a60f09e8b7b Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Tue, 22 Dec 2009 23:39:10 +0000 Subject: [PATCH] better egos git-svn-id: http://svn.net-core.org/repos/t-engine4@140 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engine/Entity.lua | 4 ++-- game/engine/Zone.lua | 23 ++++++++++++++++------- game/engine/generator/actor/Random.lua | 2 +- game/engine/generator/object/Random.lua | 2 +- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/game/engine/Entity.lua b/game/engine/Entity.lua index 1d210d9167..a45ff5672f 100644 --- a/game/engine/Entity.lua +++ b/game/engine/Entity.lua @@ -157,11 +157,11 @@ function _M:loadList(file, no_default) if t.define_as then res[t.define_as] = e end end, load = function(f) - local ret = self:loadList(f) + local ret = self:loadList(f, no_default) for i, e in ipairs(ret) do res[#res+1] = e end end, loadList = function(f) - return self:loadList(f) + return self:loadList(f, no_default) end, }, {__index=_G})) f() diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua index d2d234992b..575f2971fd 100644 --- a/game/engine/Zone.lua +++ b/game/engine/Zone.lua @@ -34,17 +34,17 @@ end --- Parses the npc/objects list and compute rarities for random generation -- ONLY entities with a rarity properties will be considered.<br/> -- This means that to get a never-random entity you simply do not put a rarity property on it. -function _M:computeRarities(list, level, ood, filter) +function _M:computeRarities(type, list, level, ood, filter) local r = { total=0 } - print("******************", level) + print("******************", level.level) for i, e in ipairs(list) do if e.rarity and e.level_range and (not filter or filter(e)) then -- print("computing rarity of", e.name) - local lev = level + local lev = level.level -- Out of Depth chance -- if ood and rng.percent(ood.chance) then --- lev = level + rng.range(ood.range[1], ood.range[2]) --- print("OOD Entity !", e.name, ":=:", level, "to", lev) +-- lev = level.level + rng.range(ood.range[1], ood.range[2]) +-- print("OOD Entity !", e.name, ":=:", level.level, "to", lev) -- end local max = 100 @@ -54,8 +54,17 @@ function _M:computeRarities(list, level, ood, filter) local genprob = max / e.rarity print("prob", e.name, math.floor(genprob), "max", math.floor(max), e.level_range[1], e.level_range[2], lev, "egoable", e.egos and #e.egos) + -- Generate and store egos list if needed + if e.egos and not level:getEntitiesList(type.."/"..e.egos) then + local egos = self:getEgosList(level, type, e.egos, e.__CLASSNAME) + if egos then + egos = self:computeRarities(type, egos, level, ood, filter) + level:setEntitiesList(type.."/"..e.egos, egos) + end + end + r.total = r.total + genprob - r[#r+1] = { e=e, genprob=r.total + genprob, level_diff = lev - level } + r[#r+1] = { e=e, genprob=r.total + genprob, level_diff = lev - level.level } end end table.sort(r, function(a, b) return a.genprob < b.genprob end) @@ -97,7 +106,7 @@ function _M:makeEntity(level, type) -- Add "ego" properties if e.egos then local egos = self:getEgosList(level, type, e.egos, e.__CLASSNAME) - local ego = egos[rng.range(1, #egos)] + local ego = self:pickEntity(egos) if ego then print("ego", ego.__CLASSNAME, ego.name, getmetatable(ego)) ego = ego:clone() diff --git a/game/engine/generator/actor/Random.lua b/game/engine/generator/actor/Random.lua index 11f48b780b..d23e0f0e91 100644 --- a/game/engine/generator/actor/Random.lua +++ b/game/engine/generator/actor/Random.lua @@ -9,7 +9,7 @@ function _M:init(zone, map, level) local data = level.data.generator.actor -- Setup the entities list - level:setEntitiesList("actor", zone:computeRarities(zone.npc_list, level.level, data.ood, nil)) + level:setEntitiesList("actor", zone:computeRarities("actor", zone.npc_list, level, data.ood, nil)) if data.adjust_level_to_player and game:getPlayer() then self.adjust_level_to_player = {base=game:getPlayer().level, min=data.adjust_level_to_player[1], max=data.adjust_level_to_player[2]} diff --git a/game/engine/generator/object/Random.lua b/game/engine/generator/object/Random.lua index 4dc974907f..d27c99e3f6 100644 --- a/game/engine/generator/object/Random.lua +++ b/game/engine/generator/object/Random.lua @@ -9,7 +9,7 @@ function _M:init(zone, map, level) local data = level.data.generator.object -- Setup the entities list - level:setEntitiesList("object", zone:computeRarities(zone.object_list, level.level, data.ood, nil)) + level:setEntitiesList("object", zone:computeRarities("object", zone.object_list, level, data.ood, nil)) if data.adjust_level_to_player and game:getPlayer() then self.adjust_level_to_player = {base=game:getPlayer().level, min=data.adjust_level_to_player[1], max=data.adjust_level_to_player[2]} -- GitLab