diff --git a/src/save.c b/src/save.c
index c5dcb76d66404c84dff790595cfed8fccc012c73..a219fdf234bccbcd40c189b3d4cae54b40b1d763 100644 (file)
--- a/src/save.c
+++ b/src/save.c
#include "render.h"
#include "music.h"
-
#include <string.h>
-#ifdef UNIX
-# include <sys/stat.h>
-#endif
#include <assert.h>
-#include "files.h"
#include "common/streams.h"
#include "common/files.h"
-char savname[SAVE_MAX][SAVE_MAXLEN];
-char savok[SAVE_MAX];
-
-static void DOT_savegame (Writer *h) {
+static void DOT_savegame (Stream *h) {
int i, n;
for (i = n = 0; i < MAXDOT; ++i) {
if (dot[i].t) {
}
}
-static void DOT_loadgame (Reader *h) {
+static void DOT_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; i++) {
}
}
-static void FX_savegame (Writer *h) {
+static void FX_savegame (Stream *h) {
int i, n;
for (i = n = 0; i < MAXFX; ++i) {
if (fx[i].t) {
}
}
-static void FX_loadgame (Reader *h) {
+static void FX_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; i++) {
}
}
-static void G_savegame (Writer *h) {
+static void G_savegame (Stream *h) {
stream_write8(_2pl, h);
stream_write8(g_dm, h);
stream_write8(g_exit, h);
stream_write(g_music, 8, 1, h);
}
-static void G_loadgame (Reader *h) {
+static void G_loadgame (Stream *h) {
_2pl = stream_read8(h);
g_dm = stream_read8(h);
g_exit = stream_read8(h);
MUS_load(g_music);
}
-static void IT_savegame (Writer *h) {
+static void IT_savegame (Stream *h) {
int i, n;
for (n = MAXITEM - 1; n >= 0 && it[n].t == 0; n--) {
// empty
stream_write32(itm_rtime, h);
}
-static void IT_loadgame (Reader *h) {
+static void IT_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; i++) {
itm_rtime = stream_read32(h);
}
-static void MN_savegame (Writer *h) {
+static void MN_savegame (Stream *h) {
int i, n;
for (n = MAXMN - 1; n >= 0 && mn[n].t == 0; n--) {
// empty
stream_write32(gsndt, h);
}
-static void MN_loadgame (Reader *h) {
+static void MN_loadgame (Stream *h) {
int i, n, c;
n = stream_read32(h);
for (i = 0; i < n; i++) {
}
}
-static void PL_save_player (player_t *p, Writer *h) {
+static void PL_save_player (player_t *p, Stream *h) {
stream_write32(p->o.x, h);
stream_write32(p->o.y, h);
stream_write32(p->o.xv, h);
// k* not saved
}
-static void PL_savegame (Writer *h) {
+static void PL_savegame (Stream *h) {
PL_save_player(&pl1, h);
if (_2pl) {
PL_save_player(&pl2, h);
stream_write8(p_immortal, h);
}
-static void PL_load_player (player_t *p, Reader *h) {
+static void PL_load_player (player_t *p, Stream *h) {
p->o.x = stream_read32(h);
p->o.y = stream_read32(h);
p->o.xv = stream_read32(h);
// k* not saved
}
-static void PL_loadgame (Reader *h) {
+static void PL_loadgame (Stream *h) {
PL_load_player(&pl1, h);
if (_2pl) {
PL_load_player(&pl2, h);
p_immortal = stream_read8(h);
}
-static void SMK_savegame (Writer *h) {
+static void SMK_savegame (Stream *h) {
int i, n;
for (i = n = 0; i < MAXSMOK; ++i) {
if (sm[i].t) {
}
}
-static void SMK_loadgame (Reader *h) {
+static void SMK_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; ++i) {
}
}
-static void SW_savegame (Writer *h) {
+static void SW_savegame (Stream *h) {
int i, n;
for (n = MAXSW - 1; n >= 0 && sw[n].t == 0; n--) {
// empty
stream_write32(sw_secrets, h);
}
-static void SW_loadgame (Reader *h) {
+static void SW_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; i++) {
sw_secrets = stream_read32(h);
}
-static void W_savegame (Writer* h) {
+static void W_savegame (Stream* h) {
char s[8];
int i;
stream_write32(sky_type, h);
stream_write(fldf, FLDW*FLDH, 1, h);
}
-static void W_loadgame (Reader *h) {
+static void W_loadgame (Stream *h) {
int i;
char s[8];
sky_type = stream_read32(h);
stream_read(fldf, FLDW*FLDH, 1, h);
}
-static void WP_savegame (Writer *h) {
+static void WP_savegame (Stream *h) {
int i, n;
for (n = MAXWPN - 1; n >= 0 && wp[n].t == 0; n--) {
// empty
}
}
-static void WP_loadgame (Reader *h) {
+static void WP_loadgame (Stream *h) {
int i, n;
n = stream_read32(h);
for (i = 0; i < n; i++) {
}
}
-static char *getsavfpname (int n, int ro) {
- static char fn[] = "savgame0.dat";
- static char p[100];
- fn[7] = n + '0';
-#ifdef UNIX
- char *e = getenv("HOME");
- strncpy(p, e, 60);
- strcat(p, "/.flatwaifu");
- if (!ro) {
- mkdir(p, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
- }
- strcat(p, "/");
- strcat(p, fn);
-#else
- strcpy(p, fn);
-#endif
- return p;
-}
-
-void SAVE_save (Writer *w, const char name[24]) {
+void SAVE_save (Stream *w, const char name[24]) {
assert(w != NULL);
stream_write(name, 24, 1, w); // slot name
stream_write16(3, w); // version
WP_savegame(w);
}
-void F_savegame (int n, char *s) {
- FILE_Writer wr;
- char *p = getsavfpname(n, 0);
- if (FILE_OpenWriter(&wr, p)) {
- SAVE_save(&wr.base, s);
- FILE_CloseWriter(&wr);
- }
-}
-
-void SAVE_load (Reader *h) {
+void SAVE_load (Stream *h) {
int16_t version;
- h->setpos(h, 24); // skip name
+ stream_setpos(h, 24); // skip name
version = stream_read16(h);
if (version == 3) {
G_loadgame(h);
}
}
-void F_getsavnames (void) {
- int i;
- char *p;
- FILE_Reader rd;
- int16_t version;
- for (i = 0; i < 7; ++i) {
- p = getsavfpname(i, 1);
- memset(savname[i], 0, 24);
- savok[i] = 0;
- if (FILE_OpenReader(&rd, p)) {
- version = -1;
- stream_read(savname[i], 24, 1, &rd.base);
- version = stream_read16(&rd.base);
- savname[i][23] = 0;
- savok[i] = version == 3;
- FILE_CloseReader(&rd);
- }
- }
-}
-
-void F_loadgame (int n) {
- FILE_Reader rd;
- char *p = getsavfpname(n, 1);
- if (FILE_OpenReader(&rd, p)) {
- SAVE_load(&rd.base);
- FILE_CloseReader(&rd);
- }
+int SAVE_getname (Stream *r, char name[24]) {
+ stream_read(name, 24, 1, r);
+ int16_t version = stream_read16(r);
+ return version == 3;
}