59 lines
1.2 KiB
Lua
59 lines
1.2 KiB
Lua
game._snapshots = {}
|
|
|
|
function make_snapshot(nr)
|
|
if not tonumber(nr) then nr = 0 end
|
|
local h = { };
|
|
h.txt = ''
|
|
h.write = function(s, ...)
|
|
local i
|
|
for i = 1, stead.table.maxn(arg) do
|
|
s.txt = s.txt .. tostring(arg[i]);
|
|
end
|
|
end
|
|
local old = game._snapshots; game._snapshots = nil
|
|
do_savegame(game, h);
|
|
game._snapshots = old
|
|
game._snapshots[nr] = h.txt;
|
|
end
|
|
|
|
function isSnapshot(nr)
|
|
if not tonumber(nr) then nr = 0 end
|
|
return (game._snapshots[nr] ~= nil)
|
|
end
|
|
|
|
function restore_snapshot(nr)
|
|
if not tonumber(nr) then nr = 0 end
|
|
local ss = game._snapshots
|
|
if not ss[nr] then return nil, true end -- nothing todo
|
|
local i,v
|
|
|
|
gamefile("main.lua"); -- legacy?
|
|
local scripts = game._scripts
|
|
for i,v in ipairs(scripts) do gamefile(v); end
|
|
game._scripts = scripts
|
|
stead.pclr();
|
|
-- if type(init) == 'function' then -- no hooks here!!!
|
|
-- init();
|
|
-- end
|
|
local f, err = loadstring(ss[nr]);
|
|
if not f then return end
|
|
local i,r = f();
|
|
game._snapshots = ss
|
|
if r then
|
|
return nil, false
|
|
end
|
|
i = do_ini(game, true);
|
|
RAW_TEXT = true
|
|
delete_snapshot(nr);
|
|
if cctx() then
|
|
pr(i)
|
|
end
|
|
return i;
|
|
end
|
|
|
|
function delete_snapshot(nr)
|
|
if not tonumber(nr) then nr = 0 end
|
|
game._snapshots[nr] = nil
|
|
end
|
|
-- vim:ts=4
|