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