X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=saveresume.c;h=5cc97267d1b5119f78e5283a5bcd0940ee30268c;hb=a37e578f6381e4271459d3acd07b3c5870142d74;hp=e6961d2c60fbcb467d63287704ce637a100f140c;hpb=a6feda53072426e635173a6a6c0e3aa95c2afc17;p=open-adventure.git diff --git a/saveresume.c b/saveresume.c index e6961d2..5cc9726 100644 --- a/saveresume.c +++ b/saveresume.c @@ -31,13 +31,17 @@ struct save_t save; /* Suspend and resume */ int suspend(FILE *input) -{ +{ /* Suspend. Offer to save things in a file, but charging + * some points (so can't win by using saved games to retry + * battles or to start over after learning zzword). + * If ADVENT_NOSAVE is defined, do nothing instead. */ + +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif long i, k; FILE *fp = NULL; - /* Suspend. Offer to save things in a file, but charging - * some points (so can't win by using saved games to retry - * battles or to start over after learning zzword). */ RSPEAK(SUSPEND_WARNING); if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ; game.saved=game.saved+5; @@ -67,10 +71,14 @@ int suspend(FILE *input) } int resume(FILE *input) -{ +{ /* Resume. Read a suspended game back from a file. + * If ADVENT_NOSAVE is defined, do nothing instead. */ + +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif FILE *fp = NULL; - - /* Resume. Read a suspended game back from a file. */ + if (game.loc != 1 || game.abbrev[1] != 1) { RSPEAK(RESUME_ABANDON); if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ; @@ -86,19 +94,30 @@ int resume(FILE *input) linenoiseFree(name); } + return restore(fp); +} + +int restore(FILE* fp) +{ /* Read and restore game state from file, assuming + * sane initial state. + * If ADVENT_NOSAVE is defined, do nothing instead. */ +#ifdef ADVENT_NOSAVE + return GO_UNKNOWN; +#endif + IGNORE(fread(&save, sizeof(struct save_t), 1, fp)); fclose(fp); if (save.version != VRSION) { - SETPRM(1,save.version/10,MOD(save.version,10)); - SETPRM(3,VRSION/10,MOD(VRSION,10)); - RSPEAK(VERSION_SKEW); + SETPRM(1,save.version/10,MOD(save.version,10)); + SETPRM(3,VRSION/10,MOD(VRSION,10)); + RSPEAK(VERSION_SKEW); } else { - memcpy(&game, &save.game, sizeof(struct game_t)); - OBJSND[BIRD] = save.bird; - OBJTXT[OYSTER] = save.bivalve; - game.zzword=RNDVOC(3,game.zzword); + memcpy(&game, &save.game, sizeof(struct game_t)); + OBJSND[BIRD] = save.bird; + OBJTXT[OYSTER] = save.bivalve; + game.zzword=RNDVOC(3,game.zzword); } return GO_TOP; } -/* end */ +/* end */ \ No newline at end of file