From b2579980d38921650518ab8fdfde0a6ffe36c596 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Wed, 31 Mar 2010 08:28:39 +0000 Subject: [PATCH] * always unpause when player has no energy * traps wont freeze the player * wilderness should save/load much quicker (instantly) * thieves cannot steal, talent not in game yet * fixed potion of slime mold git-svn-id: http://svn.net-core.org/repos/t-engine4@474 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engine/Game.lua | 2 +- game/engine/GameTurnBased.lua | 3 +++ game/engine/Trap.lua | 1 + game/engine/Zone.lua | 21 +++++++++++++++++-- game/engine/class.lua | 4 ++-- .../modules/tome/data/general/npcs/thieve.lua | 10 ++++----- .../tome/data/general/objects/potions.lua | 2 +- .../tome/data/zones/wilderness/zone.lua | 2 +- 8 files changed, 33 insertions(+), 12 deletions(-) diff --git a/game/engine/Game.lua b/game/engine/Game.lua index 4d4470feef..24f557e1cb 100644 --- a/game/engine/Game.lua +++ b/game/engine/Game.lua @@ -39,7 +39,7 @@ function _M:defaultSavedFields(t) w=true, h=true, zone=true, player=true, level=true, entities=true, energy_to_act=true, energy_per_tick=true, turn=true, paused=true, save_name=true, always_target=true, gfxmode=true, uniques=true, object_known_types=true, - current_music=true, + current_music=true, memory_levels=true, } table.merge(def, t) return def diff --git a/game/engine/GameTurnBased.lua b/game/engine/GameTurnBased.lua index d3974a1d87..979e35b642 100644 --- a/game/engine/GameTurnBased.lua +++ b/game/engine/GameTurnBased.lua @@ -17,6 +17,9 @@ end function _M:tick() if self.paused then + -- Auto unpause if the player has no energy to act + if game:getPlayer() and not game:getPlayer():enoughEnergy() then game.paused = false end + -- If we are paused do not get energy, but still process frames if needed engine.Game.tick(self) else diff --git a/game/engine/Trap.lua b/game/engine/Trap.lua index d2c2df5000..511b78ee19 100644 --- a/game/engine/Trap.lua +++ b/game/engine/Trap.lua @@ -24,6 +24,7 @@ function _M:init(t, no_default) end function _M:loaded() + Entity.loaded(self) -- known_by table is a weak table on keys, so taht it does not prevent garbage collection of actors setmetatable(self.known_by, {__mode="k"}) end diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua index dcc9716d7c..b5d8a9bbfc 100644 --- a/game/engine/Zone.lua +++ b/game/engine/Zone.lua @@ -273,7 +273,12 @@ function _M:leaveLevel(no_close, lev, old_lev) if not no_close and game.level and game.level.map then game:leaveLevel(game.level, lev, old_lev) - if game.level.data.persistant then + if type(game.level.data.persistant) == "string" and game.level.data.persistant == "memory" then + print("[LEVEL] persisting to memory", game.level.id) + game.memory_levels = game.memory_levels or {} + game.memory_levels[game.level.id] = game.level + elseif game.level.data.persistant then + print("[LEVEL] persisting to disk file", game.level.id) local save = Savefile.new(game.save_name) save:saveLevel(game.level) save:close() @@ -295,7 +300,18 @@ function _M:getLevel(game, lev, old_lev, no_close) local level -- Load persistant level? - if level_data.persistant == true then + if type(level_data.persistant) == "string" and level_data.persistant == "memory" then + game.memory_levels = game.memory_levels or {} + level = game.memory_levels[self.short_name.."-"..lev] + + if level then + -- Setup the level in the game + game:setLevel(level) + -- Recreate the map because it could have been saved with a different tileset or whatever + -- This is not needed in case of a direct to file persistance becuase the map IS recreated each time anyway + level.map:recreate() + end + elseif level_data.persistant then local save = Savefile.new(game.save_name) level = save:loadLevel(self.short_name, lev) save:close() @@ -330,6 +346,7 @@ function _M:newLevel(level_data, lev, old_lev, game) -- Save level data level.data = level_data + level.id = self.short_name.."-"..lev -- Setup the level in the game game:setLevel(level) diff --git a/game/engine/class.lua b/game/engine/class.lua index f539299308..82a464ab0e 100644 --- a/game/engine/class.lua +++ b/game/engine/class.lua @@ -137,7 +137,7 @@ local function serialize_data(outf, name, value, saved, filter, allow, savefile, end for k,v in pairs(value) do -- save its fields --- print(allow, k , filter[k]) +-- print(allow, k , filter[k], v, "will dump", (not allow and not filter[k]) or (allow and filter[k])) if (not allow and not filter[k]) or (allow and filter[k]) then local fieldname -- Special case to handle index by objects @@ -147,7 +147,7 @@ local function serialize_data(outf, name, value, saved, filter, allow, savefile, else fieldname = string.format("%s[%s]", name, basicSerialize(k)) end - serialize_data(outf, fieldname, v, saved, filter, allow, savefile, false) + serialize_data(outf, fieldname, v, saved, {new=true}, false, savefile, false) end end end diff --git a/game/modules/tome/data/general/npcs/thieve.lua b/game/modules/tome/data/general/npcs/thieve.lua index ce834402d2..405dc9654d 100644 --- a/game/modules/tome/data/general/npcs/thieve.lua +++ b/game/modules/tome/data/general/npcs/thieve.lua @@ -30,7 +30,7 @@ newEntity{ base = "BASE_NPC_THIEF", rarity = 5, combat_armor = 1, combat_def = 5, max_life = resolvers.rngavg(60,80), - resolvers.talents{ [Talents.T_STEAL]=1, }, + resolvers.talents{ }, } newEntity{ base = "BASE_NPC_THIEF", @@ -39,7 +39,7 @@ newEntity{ base = "BASE_NPC_THIEF", level_range = {2, 50}, exp_worth = 1, rarity = 5, combat_armor = 2, combat_def = 5, - resolvers.talents{ [Talents.T_STEALTH]=1, [Talents.T_STEAL]=1, }, + resolvers.talents{ [Talents.T_STEALTH]=1, }, max_life = resolvers.rngavg(70,90), } @@ -49,7 +49,7 @@ newEntity{ base = "BASE_NPC_THIEF", level_range = {3, 50}, exp_worth = 1, rarity = 5, combat_armor = 3, combat_def = 5, - resolvers.talents{ [Talents.T_STEALTH]=2, [Talents.T_STEAL]=2, }, + resolvers.talents{ [Talents.T_STEALTH]=2, }, max_life = resolvers.rngavg(70,90), } @@ -59,7 +59,7 @@ newEntity{ base = "BASE_NPC_THIEF", level_range = {5, 50}, exp_worth = 1, rarity = 7, combat_armor = 4, combat_def = 6, - resolvers.talents{ [Talents.T_STEAL]=1, [Talents.T_STEALTH]=3, [Talents.T_LETHALITY]=2, }, + resolvers.talents{ [Talents.T_STEALTH]=3, [Talents.T_LETHALITY]=2, }, max_life = resolvers.rngavg(80,100), } @@ -77,7 +77,7 @@ newEntity{ base = "BASE_NPC_THIEF", {type="human", subtype="thief", name="thief", number=1, hasxp=false}, {type="human", subtype="thief", name="rogue", number=2, hasxp=false}, }, - resolvers.talents{ [Talents.T_STEAL]=2, [Talents.T_STEALTH]=3, [Talents.T_SUMMON]=1, [Talents.T_LETHALITY]=3, }, + resolvers.talents{ [Talents.T_STEALTH]=3, [Talents.T_SUMMON]=1, [Talents.T_LETHALITY]=3, }, } newEntity{ base = "BASE_NPC_THIEF", diff --git a/game/modules/tome/data/general/objects/potions.lua b/game/modules/tome/data/general/objects/potions.lua index 9eacf1d95a..0608766616 100644 --- a/game/modules/tome/data/general/objects/potions.lua +++ b/game/modules/tome/data/general/objects/potions.lua @@ -162,7 +162,7 @@ newEntity{ base = "BASE_POTION", game.logSeen(who, "%s quaffs the slime juice. Yuck.", who.name:capitalize()) -- 1% chance of gaining slime mold powers if rng.percent(1) then - who:learnTalentType("gift/slime", false) + who:learnTalentType("wild-gift/slime", false) game.logSeen(who, "%s is transformed by the slime mold juice.", who.name:capitalize()) game.logPlayer(who, "#00FF00#You gain an affinity for the molds. You can now learn new slime talents (press G).") end diff --git a/game/modules/tome/data/zones/wilderness/zone.lua b/game/modules/tome/data/zones/wilderness/zone.lua index 7a4a55f332..2476c2fd5f 100644 --- a/game/modules/tome/data/zones/wilderness/zone.lua +++ b/game/modules/tome/data/zones/wilderness/zone.lua @@ -5,7 +5,7 @@ return { width = 200, height = 130, all_remembered = true, all_lited = true, - persistant = true, + persistant = "memory", generator = { map = { class = "mod.class.generator.map.Wilderness", -- GitLab