autosave from game

This commit is contained in:
p.kosyh 2009-11-14 18:10:10 +00:00
parent 2ade66d7d3
commit 1f8801a9f0
5 changed files with 42 additions and 2 deletions

3
debian/changelog vendored
View file

@ -15,7 +15,8 @@ instead (1.0.0) unstable; urgency=low
* f8/f9 - quicksave/quickload
* game.enable_save
* lua stack overflow???
* autosave function
-- Peter Kosyh <p.kosyh@gmail.com> Tue, 3 Nov 2009 19:43:00 +0400
instead (0.9.3) unstable; urgency=low

View file

@ -998,6 +998,21 @@ void scene_scrollbar(void)
el_draw(el_sup);
}
static void game_autosave(void)
{
int b,r;
if (!curgame_dir)
return;
instead_eval("return get_autosave();");
b = instead_bretval(0);
r = instead_iretval(1);
instead_clear();
if (b) {
r = r % MAX_SAVE_SLOTS;
game_save(r);
/* instead_eval("game.autosave = false;"); instead_clear(); */
}
}
static void dec_music(void *data)
{
@ -1209,8 +1224,10 @@ int game_cmd(char *cmd)
cmdstr = instead_cmd(cmd); instead_clear();
// goto err;
game_music_player();
game_sound_player();
game_autosave();
if (!cmdstr)
goto inv; /* hackish? ok, yes it is... */

View file

@ -136,6 +136,17 @@ int instead_bretval(int n)
return lua_toboolean(L, n - N);
}
int instead_iretval(int n)
{
int N;
if (!L)
return 0;
N = lua_gettop(L); /* number of arguments */
if (n - N >= 0)
return 0;
return lua_tonumber(L, n - N);
}
char *instead_cmd(char *s)
{
char buf[1024];

View file

@ -9,6 +9,7 @@ extern int instead_eval(char *s);
extern int instead_clear(void);
extern char *instead_retval(int n);
extern int instead_bretval(int n);
extern int instead_iretval(int n);
char *fromgame(const char *s);
extern int instead_encode(const char *s, const char *d);
#endif

View file

@ -1290,7 +1290,8 @@ function game(v)
end
function isEnableSave()
if game.enable_save == nil then
if game.enable_save == nil or get_autosave() then
game.autosave = false -- we have only one try for autosave ;)
return true
end
return call_bool(game, 'enable_save');
@ -2077,6 +2078,15 @@ if is_sound == nil then
end
end
function autosave(slot)
game.autosave = true;
game.autosave_slot = slot;
end
function get_autosave()
return game.autosave, game.autosave_slot
end
function get_sound()
return game._sound, game._sound_channel, game._sound_loop;
end