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

better egos

git-svn-id: http://svn.net-core.org/repos/t-engine4@140 51575b47-30f0-44d4-a5cc-537603b46e54
parent 91bc6584
No related branches found
No related tags found
No related merge requests found
...@@ -157,11 +157,11 @@ function _M:loadList(file, no_default) ...@@ -157,11 +157,11 @@ function _M:loadList(file, no_default)
if t.define_as then res[t.define_as] = e end if t.define_as then res[t.define_as] = e end
end, end,
load = function(f) 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 for i, e in ipairs(ret) do res[#res+1] = e end
end, end,
loadList = function(f) loadList = function(f)
return self:loadList(f) return self:loadList(f, no_default)
end, end,
}, {__index=_G})) }, {__index=_G}))
f() f()
......
...@@ -34,17 +34,17 @@ end ...@@ -34,17 +34,17 @@ end
--- Parses the npc/objects list and compute rarities for random generation --- Parses the npc/objects list and compute rarities for random generation
-- ONLY entities with a rarity properties will be considered.<br/> -- 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. -- 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 } local r = { total=0 }
print("******************", level) print("******************", level.level)
for i, e in ipairs(list) do for i, e in ipairs(list) do
if e.rarity and e.level_range and (not filter or filter(e)) then if e.rarity and e.level_range and (not filter or filter(e)) then
-- print("computing rarity of", e.name) -- print("computing rarity of", e.name)
local lev = level local lev = level.level
-- Out of Depth chance -- Out of Depth chance
-- if ood and rng.percent(ood.chance) then -- if ood and rng.percent(ood.chance) then
-- lev = level + rng.range(ood.range[1], ood.range[2]) -- lev = level.level + rng.range(ood.range[1], ood.range[2])
-- print("OOD Entity !", e.name, ":=:", level, "to", lev) -- print("OOD Entity !", e.name, ":=:", level.level, "to", lev)
-- end -- end
local max = 100 local max = 100
...@@ -54,8 +54,17 @@ function _M:computeRarities(list, level, ood, filter) ...@@ -54,8 +54,17 @@ function _M:computeRarities(list, level, ood, filter)
local genprob = max / e.rarity 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) 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.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
end end
table.sort(r, function(a, b) return a.genprob < b.genprob end) table.sort(r, function(a, b) return a.genprob < b.genprob end)
...@@ -97,7 +106,7 @@ function _M:makeEntity(level, type) ...@@ -97,7 +106,7 @@ function _M:makeEntity(level, type)
-- Add "ego" properties -- Add "ego" properties
if e.egos then if e.egos then
local egos = self:getEgosList(level, type, e.egos, e.__CLASSNAME) 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 if ego then
print("ego", ego.__CLASSNAME, ego.name, getmetatable(ego)) print("ego", ego.__CLASSNAME, ego.name, getmetatable(ego))
ego = ego:clone() ego = ego:clone()
......
...@@ -9,7 +9,7 @@ function _M:init(zone, map, level) ...@@ -9,7 +9,7 @@ function _M:init(zone, map, level)
local data = level.data.generator.actor local data = level.data.generator.actor
-- Setup the entities list -- 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 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]} self.adjust_level_to_player = {base=game:getPlayer().level, min=data.adjust_level_to_player[1], max=data.adjust_level_to_player[2]}
......
...@@ -9,7 +9,7 @@ function _M:init(zone, map, level) ...@@ -9,7 +9,7 @@ function _M:init(zone, map, level)
local data = level.data.generator.object local data = level.data.generator.object
-- Setup the entities list -- 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 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]} self.adjust_level_to_player = {base=game:getPlayer().level, min=data.adjust_level_to_player[1], max=data.adjust_level_to_player[2]}
......
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