diff --git a/game/engines/default/engine/class.lua b/game/engines/default/engine/class.lua index 9d97e0ebc6f5a9a48e342a882ebab4edb6c7b20b..d2a8a622abe9c663b0a0b6c2cbe4d0a8dd0b84df 100644 --- a/game/engines/default/engine/class.lua +++ b/game/engines/default/engine/class.lua @@ -169,16 +169,16 @@ function _M:clone(t) end local function clonerecursfull(clonetable, d, noclonecall, use_saveinstead) + if use_saveinstead and d.__CLASSNAME and d.__SAVEINSTEAD then + d = d.__SAVEINSTEAD + if clonetable[d] then return d, 1 end + end + local nb = 0 local add local n = {} clonetable[d] = n - if use_saveinstead and d.__CLASSNAME and d.__SAVEINSTEAD then - d = d.__SAVEINSTEAD - if clonetable[d] then return d, nb + 1 end - end - local k, e = next(d) while k do local nk, ne = k, e diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 8a55752cef47ce74ca1e1205978924a1a2a2f81e..78179c4e6c19e0bae399d613b3c3f91a09284129 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -255,8 +255,8 @@ function _M:newGame() -- Generate if self.player.__game_difficulty then self:setupDifficulty(self.player.__game_difficulty) end self:setupPermadeath(self.player) - --self:changeLevel(1, "test") - self:changeLevel(self.player.starting_level or 1, self.player.starting_zone, {force_down=self.player.starting_level_force_down}) + self:changeLevel(1, "test") + -- self:changeLevel(self.player.starting_level or 1, self.player.starting_zone, {force_down=self.player.starting_level_force_down}) print("[PLAYER BIRTH] resolve...") self.player:resolve() diff --git a/game/modules/tome/class/NicerTiles.lua b/game/modules/tome/class/NicerTiles.lua index 72a61c127b6d87c573d77eb71821a98019aa8cd5..af2b1221240aa333e31eb51c703ac603405cd06c 100644 --- a/game/modules/tome/class/NicerTiles.lua +++ b/game/modules/tome/class/NicerTiles.lua @@ -30,6 +30,14 @@ function _M:init() self.edits = {} end +local function doclone(g, full) + local saveinstead = g.__SAVEINSTEAD + if full then g = g:cloneFull() + else g = g:clone() end + g.__SAVEINSTEAD = saveinstead + return g +end + function _M:getTile(name) if not name then return end @@ -46,7 +54,7 @@ function _M:getTile(name) e = self.repo[name] end if e and e.force_clone then - e = e:cloneFull() + e = doclone(e) end return e end @@ -73,7 +81,8 @@ function _M:handle(level, i, j, use_ntl) if g.define_as and not g.__SAVEINSTEAD then local cg - if self.saveinstead_store[g] then cg = self.saveinstead_store[g] + if self.saveinstead_store[g] then + cg = self.saveinstead_store[g] else cg = g:cloneFull() cg.__ntl = true @@ -114,13 +123,13 @@ function _M:replaceAll(level) local g = level.map(i, j, Map.TERRAIN) if g.__nice_tile_base then local base = g.__nice_tile_base - g = base:cloneFull() + g = doclone(base) g:removeAllMOs() g.__nice_tile_base = base else - g = g:cloneFull() + g = doclone(g) g:removeAllMOs() - g.__nice_tile_base = g:cloneFull() + g.__nice_tile_base = doclone(g) end local id = {g.name or "???"} @@ -136,7 +145,7 @@ function _M:replaceAll(level) -- Otherwise compute this new combo and store the entity else local cloned = false - if not g.force_clone or not self.edit_entity_store then g = g:cloneFull() g.force_clone = true cloned = true end + if not g.force_clone or not self.edit_entity_store then g = doclone(g, true) g.force_clone = true cloned = true end g:removeAllMOs(true)