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

test

git-svn-id: http://svn.net-core.org/repos/t-engine4@6644 51575b47-30f0-44d4-a5cc-537603b46e54
parent f68380db
No related branches found
No related tags found
No related merge requests found
Showing with 137 additions and 19 deletions
......@@ -807,6 +807,8 @@ end
-- @param loaded an optional table of already loaded files
-- @usage MyEntityClass:loadList("/data/my_entities_def.lua")
function _M:loadList(file, no_default, res, mod, loaded)
local Zone = require "engine.Zone"
if type(file) == "table" then
res = res or {}
for i, f in ipairs(file) do
......@@ -839,6 +841,7 @@ function _M:loadList(file, no_default, res, mod, loaded)
loaded[file] = true
local newenv newenv = {
currentZone = Zone:getCurrentLoadingZone(),
class = self,
loaded = loaded,
resolvers = resolvers,
......
......@@ -82,11 +82,19 @@ function _M:updateBaseLevel()
end
--- Loads basic entities lists
local _load_zone = nil
function _M:loadBaseLists()
_load_zone = self
self.npc_list = self.npc_class:loadList("/data/zones/"..self.short_name.."/npcs.lua")
self.grid_list = self.grid_class:loadList("/data/zones/"..self.short_name.."/grids.lua")
self.object_list = self.object_class:loadList("/data/zones/"..self.short_name.."/objects.lua")
self.trap_list = self.trap_class:loadList("/data/zones/"..self.short_name.."/traps.lua")
_load_zone = nil
end
--- Gets the currently loading zone
function _M:getCurrentLoadingZone()
return _load_zone
end
--- Leaves a zone
......@@ -575,6 +583,7 @@ function _M:load(dynamic)
if not data and not dynamic then
local f, err = loadfile("/data/zones/"..self.short_name.."/zone.lua")
if err then error(err) end
setfenv(f, setmetatable({self=self, short_name=self.short_name}, {__index=_G}))
data = f()
ret = false
......@@ -586,14 +595,15 @@ function _M:load(dynamic)
self._no_save_fields.trap_list = true
end
for k, e in pairs(data) do self[k] = e end
self:onLoadZoneFile("/data/zones/"..self.short_name.."/")
if self.on_loaded then self:on_loaded() end
elseif not data and dynamic then
data = dynamic
ret = false
for k, e in pairs(data) do self[k] = e end
if self.on_loaded then self:on_loaded() end
end
for k, e in pairs(data) do self[k] = e end
return ret
end
......
......@@ -667,6 +667,7 @@ function _M:changeLevelReal(lev, zone, params)
self.zone:getLevel(self, lev, old_lev, true)
self.visited_zones[self.zone.short_name] = true
world:seenZone(self.zone.short_name)
self.level.temp_shift_zone = oz
self.level.temp_shift_level = ol
......@@ -694,6 +695,7 @@ function _M:changeLevelReal(lev, zone, params)
self.level = old.temp_shift_level
self.visited_zones[self.zone.short_name] = true
world:seenZone(self.zone.short_name)
-- if self.level.map.closed then
force_recreate = true
-- else
......@@ -732,6 +734,7 @@ function _M:changeLevelReal(lev, zone, params)
end
local _, new_level = self.zone:getLevel(self, lev, old_lev)
self.visited_zones[self.zone.short_name] = true
world:seenZone(self.zone.short_name)
if new_level then
afternicer = self.state:startEvents()
......
......@@ -2005,3 +2005,26 @@ function _M:startEvents()
if game.zone.events_by_level then game.zone.assigned_events = nil end
end
end
function _M:alternateZone(short_name, ...)
if not world:hasSeenZone(short_name) and not config.settings.cheat then print("Alternate layout for "..short_name.." refused: never visited") return "DEFAULT" end
local list = {...}
table.insert(list, 1, {"DEFAULT", 1})
print("[ZONE] Alternate layout computing for")
table.print(list)
local probs = {}
for _, kind in ipairs(list) do
local p = math.ceil(100 / kind[2])
for i = 1, p do probs[#probs+1] = kind[1] end
end
return rng.table(probs)
end
function _M:alternateZoneTier1(short_name, ...)
if not game.state:tier1Killed(1) then return "DEFAULT" end
return self:alternateZone(short_name, ...)
end
\ No newline at end of file
......@@ -63,3 +63,13 @@ function _M:gainAchievement(id, src, ...)
mod.class.interface.WorldAchievements.gainAchievement(self, id, src, ...)
if not knew and self.achieved[id] then game.party.on_death_show_achieved[#game.party.on_death_show_achieved+1] = "Gained new achievement: "..a.name end
end
function _M:seenZone(short_name)
self.seen_zones = self.seen_zones or {}
self.seen_zones[short_name] = true
end
function _M:hasSeenZone(short_name)
self.seen_zones = self.seen_zones or {}
return self.seen_zones[short_name]
end
......@@ -51,6 +51,7 @@ newEntity{ name = "wisp",
no_drops = true, open_door = false,
infravision = 10,
rarity = false,
rarity_summoned_crystal = 1,
lite = 4,
life_rating = 1, rank = 1, size_category = 1,
autolevel = "caster",
......@@ -150,7 +151,7 @@ newEntity{ base = "BASE_NPC_CRYSTAL",
level_range = {10, nil}, exp_worth = 1,
rarity = 5,
resists = { [DamageType.LIGHT] = 100 },
summon = {{name = "wisp", number=3, hasxp=false}},
summon = {{name = "wisp", number=3, hasxp=false, special_rarity="rarity_summoned_crystal"}},
resolvers.talents{
[Talents.T_SUMMON]=1,
}
......
......@@ -27,7 +27,11 @@ desc = function(self, who)
desc[#desc+1] = "The Sandworm Lair is to the far west of Derth, near the sea."
desc[#desc+1] = "The Daikara is on the eastern borders of the Thaloren forest."
if self:isCompleted("old-forest") then
desc[#desc+1] = "#LIGHT_GREEN#* You have explored the Old Forest and vanquished Wrathroot.#WHITE#"
if self:isCompleted("old-forest-crystal") then
desc[#desc+1] = "#LIGHT_GREEN#* You have explored the Old Forest and vanquished Shardskin.#WHITE#"
else
desc[#desc+1] = "#LIGHT_GREEN#* You have explored the Old Forest and vanquished Wrathroot.#WHITE#"
end
else
desc[#desc+1] = "#SLATE#* You must explore the Old Forest and find out what lurks there and what treasures are to be gained!#WHITE#"
end
......
......@@ -17,8 +17,8 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
local p = rng.range(1, 3)
local is_flooded = p == 3
local layout = game.state:alternateZone(short_name, {"FLOODED", 2})
local is_flooded = layout == "FLOODED"
return {
name = "Lake of Nur",
......
......@@ -26,7 +26,7 @@ local events = { one_per_level=true,
{name="antimagic-bush", minor=true, percent=40},
}
if rng.percent(33) then
if self.is_crystaline then
events[#events+1] = {name="crystaline-forest", minor=true, percent=200, max_repeat=3}
end
......
......@@ -17,18 +17,76 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
load("/data/general/npcs/bear.lua", rarity(1))
load("/data/general/npcs/vermin.lua", rarity(3))
load("/data/general/npcs/canine.lua", rarity(0))
load("/data/general/npcs/snake.lua", rarity(0))
load("/data/general/npcs/swarm.lua", rarity(1))
load("/data/general/npcs/plant.lua", rarity(0))
load("/data/general/npcs/ant.lua", rarity(2))
load("/data/general/npcs/all.lua", rarity(4, 35))
if not currentZone.is_crystaline then
load("/data/general/npcs/bear.lua", rarity(1))
load("/data/general/npcs/vermin.lua", rarity(3))
load("/data/general/npcs/canine.lua", rarity(0))
load("/data/general/npcs/snake.lua", rarity(0))
load("/data/general/npcs/swarm.lua", rarity(1))
load("/data/general/npcs/plant.lua", rarity(0))
load("/data/general/npcs/ant.lua", rarity(2))
load("/data/general/npcs/all.lua", rarity(4, 35))
else
load("/data/general/npcs/crystal.lua", rarity(0))
load("/data/general/npcs/bear.lua", rarity(1))
load("/data/general/npcs/vermin.lua", rarity(3))
load("/data/general/npcs/swarm.lua", rarity(1))
load("/data/general/npcs/plant.lua", rarity(0))
load("/data/general/npcs/ant.lua", rarity(2))
load("/data/general/npcs/all.lua", rarity(4, 35))
end
local Talents = require("engine.interface.ActorTalents")
newEntity{ define_as = "SHARDSKIN",
allow_infinite_dungeon = true,
type = "giant", subtype = "crystal", unique = true,
name = "Shardskin",
display = "%", color=colors.VIOLET,
image = "npc/immovable_crystal_golden_crystal.png",
desc = [[This crystaline structure seems to be filled with a malovelant aura. Thourgh the crystal surface you can still see the remains of what once was a huge tree..]],
killer_message = "and integrated into the crystaline structure",
level_range = {12, nil}, exp_worth = 2,
max_life = 200, life_rating = 17, fixed_rating = true,
stats = { str=15, dex=10, cun=8, mag=20, wil=20, con=20 },
rank = 4,
size_category = 5,
infravision = 10,
instakill_immune = 1,
move_others=true,
combat = { dam=resolvers.levelup(27, 1, 0.8), atk=10, apr=0, dammod={mag=1.2}, sound="actions/melee_thud" },
resists = { [DamageType.NATURE] = -50 },
body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
resolvers.equip{ {type="armor", subtype="shield", defined="WRATHROOT_SHIELD", random_art_replace={chance=75}, autoreq=true}, },
resolvers.drops{chance=100, nb=5, {tome_drops="boss"} },
resolvers.talents{
[Talents.T_ARMOUR_TRAINING]={base=4, every=5, max=15},
[Talents.T_STUN]={base=2, every=6, max=6},
[Talents.T_ICE_STORM]={base=1, every=6, max=6},
[Talents.T_TIDAL_WAVE]={base=1, every=6, max=6},
[Talents.T_FREEZE]={base=2, every=6, max=6},
},
autolevel = "caster",
ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
ai_tactic = resolvers.tactic"ranged",
resolvers.inscriptions(1, "rune"),
on_die = function(self, who)
game.state:activateBackupGuardian("SNAPROOT", 3, 50, "Have you heard, the old forest seems to have been claimed by a new evil!")
game.player:resolveSource():grantQuest("starter-zones")
game.player:resolveSource():setQuestStatus("starter-zones", engine.Quest.COMPLETED, "old-forest")
game.player:resolveSource():setQuestStatus("starter-zones", engine.Quest.COMPLETED, "old-forest-crystal")
end,
}
newEntity{ define_as = "WRATHROOT",
allow_infinite_dungeon = true,
type = "giant", subtype = "treant", unique = true,
......@@ -79,6 +137,7 @@ newEntity{ define_as = "WRATHROOT",
end,
}
newEntity{ base = "BASE_NPC_RODENT",
allow_infinite_dungeon = true,
name = "cute little bunny", color=colors.SALMON,
......
......@@ -17,6 +17,10 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
local layout = game.state:alternateZone(short_name, {"CRYSTALINE", 2})
layout = "CRYSTALINE"
local is_crystaline = layout == "CRYSTALINE"
return {
name = "Old Forest",
level_range = {7, 16},
......@@ -34,6 +38,7 @@ return {
ambient_music = {"Woods of Eremae.ogg", "weather/rain.ogg"},
min_material_level = function() return game.state:isAdvanced() and 3 or 1 end,
max_material_level = function() return game.state:isAdvanced() and 4 or 2 end,
is_crystaline = is_crystaline,
generator = {
map = {
class = "engine.generator.map.Roomer",
......@@ -51,7 +56,7 @@ return {
actor = {
class = "mod.class.generator.actor.Random",
nb_npc = {20, 30},
guardian = "WRATHROOT",
guardian = is_crystaline and "SHARDSKIN" or "WRATHROOT",
},
object = {
class = "engine.generator.object.Random",
......
......@@ -17,8 +17,8 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
local p = game.state:tier1Killed(1) and rng.range(1, 2) or 1
if p == 1 then
local layout = game.state:alternateZoneTier1(short_name, {"OVERGROUND", 1})
if layout == "DEFAULT" then
-- Underground
return {
......@@ -88,7 +88,7 @@ return {
end,
}
else
elseif layout == "OVERGROUND" then
-- Overground
return {
......
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