remove field-level savefile code

This commit is contained in:
nhmall
2019-12-08 07:27:01 -05:00
parent 2cb46c4153
commit bc8c1f8f56
37 changed files with 38 additions and 12504 deletions

View File

@@ -5,8 +5,6 @@
#include "hack.h"
#include "lev.h"
#include "sfproto.h"
#ifndef NO_SIGNAL
#include <signal.h>
@@ -149,10 +147,6 @@ dosave0()
(void) delete_savefile(); /* ab@unido */
return 0;
}
#ifdef SAVEFILE_DEBUGGING
if (nhfp && nhfp->fieldlevel && nhfp->fplog)
(void) fprintf(nhfp->fplog, "# just opened\n");
#endif
vision_recalc(2); /* shut down vision to prevent problems
in the event of an impossible() call */
@@ -202,9 +196,6 @@ dosave0()
}
#endif /* MFLOPPY */
if (nhfp->fieldlevel && nhfp->addinfo && (nhfp->mode & WRITING))
sfo_addinfo(nhfp, "NetHack", "start", "savefile", 0);
nhfp->mode = WRITING | FREEING;
store_version(nhfp);
store_savefileinfo(nhfp);
@@ -259,8 +250,6 @@ dosave0()
close_nhfile(onhfp);
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &ltmp, sizeof ltmp); /* level number*/
if (nhfp->fieldlevel)
sfo_xchar(nhfp, &ltmp, "gamestate", "level_number", 1); /* xchar */
savelev(nhfp, ltmp); /* actual level*/
delete_levelfile(ltmp);
}
@@ -294,14 +283,6 @@ NHFILE *nhfp;
bwrite(nhfp->fd, (genericptr_t) &flags, sizeof flags);
#ifdef SYSFLAGS
bwrite(nhfp->fd, (genericptr_t) &sysflags, sysflags);
#endif
}
if (nhfp->fieldlevel) {
sfo_ulong(nhfp, &uid, "gamestate", "uid", 1);
sfo_context_info(nhfp, &g.context, "gamestate", "g.context", 1);
sfo_flag(nhfp, &flags, "gamestate" , "flags", 1);
#ifdef SYSFLAGS
sfo_flag(nhfp, &sysflags, "gamestate" , "sysflags", 1);
#endif
}
urealtime.finish_time = getnow();
@@ -318,12 +299,6 @@ NHFILE *nhfp;
sizeof urealtime.realtime);
bwrite(nhfp->fd, yyyymmddhhmmss(urealtime.start_timing), 14);
}
if (nhfp->fieldlevel) {
sfo_you(nhfp, &u, "gamestate", "you", 1);
sfo_str(nhfp, yyyymmddhhmmss(ubirthday), "gamestate", "ubirthday", 14);
sfo_long(nhfp, &urealtime.realtime, "gamestate", "realtime", 1);
sfo_str(nhfp, yyyymmddhhmmss(urealtime.start_timing), "gamestate", "start_timing", 14);
}
/* this is the value to use for the next update of urealtime.realtime */
urealtime.start_timing = urealtime.finish_time;
save_killers(nhfp);
@@ -355,12 +330,6 @@ NHFILE *nhfp;
}
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) g.mvitals, sizeof g.mvitals);
if (nhfp->fieldlevel) {
int i;
for (i = 0; i < NUMMONS; ++i)
sfo_mvitals(nhfp, &g.mvitals[i], "gamestate", "g.mvitals", 1);
}
save_dungeon(nhfp, (boolean) !!perform_bwrite(nhfp),
(boolean) !!release_data(nhfp));
savelevchn(nhfp);
@@ -371,39 +340,20 @@ NHFILE *nhfp;
bwrite(nhfp->fd, (genericptr_t) g.spl_book,
sizeof (struct spell) * (MAXSPELL + 1));
}
if (nhfp->fieldlevel) {
int i;
struct spell *sptmp;
sfo_long(nhfp, &g.moves, "gamestate", "g.moves", 1);
sfo_long(nhfp, &g.monstermoves, "gamestate", "g.monstermoves", 1);
sfo_q_score(nhfp, &g.quest_status, "gamestate", "g.quest_status", 1);
sptmp = g.spl_book;
for (i = 0; i < (MAXSPELL + 1); ++i)
sfo_spell(nhfp, sptmp++, "gamestate", "g.spl_book", 1);
}
save_artifacts(nhfp);
save_oracles(nhfp);
if (g.ustuck_id) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.ustuck_id, sizeof g.ustuck_id);
if (nhfp->fieldlevel)
sfo_unsigned(nhfp, &g.ustuck_id, "gamestate", "g.ustuck_id", 1);
}
if (g.usteed_id) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.usteed_id, sizeof g.usteed_id);
if (nhfp->fieldlevel)
sfo_unsigned(nhfp, &g.usteed_id, "gamestate", "g.usteed_id", 1);
}
if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) g.pl_character, sizeof g.pl_character);
bwrite(nhfp->fd, (genericptr_t) g.pl_fruit, sizeof g.pl_fruit);
}
if (nhfp->fieldlevel) {
sfo_char(nhfp, g.pl_character, "gamestate", "g.pl_character", sizeof g.pl_character);
sfo_char(nhfp, g.pl_fruit, "gamestate", "g.pl_fruit", sizeof g.pl_fruit);
}
savefruitchn(nhfp);
savenames(nhfp);
save_waterlevel(nhfp);
@@ -478,15 +428,11 @@ savestateinlock()
nhfp->mode = WRITING;
if (nhfp->structlevel)
(void) write(nhfp->fd, (genericptr_t) &g.hackpid, sizeof g.hackpid);
if (nhfp->fieldlevel)
sfo_int(nhfp, &g.hackpid, "gamestate", "g.hackpid", 1);
if (flags.ins_chkpt) {
int currlev = ledger_no(&u.uz);
if (nhfp->structlevel)
(void) write(nhfp->fd, (genericptr_t) &currlev, sizeof currlev);
if (nhfp->fieldlevel)
sfo_int(nhfp, &currlev, "gamestate", "savestateinlock", 1);
save_savefile_name(nhfp);
store_version(nhfp);
store_savefileinfo(nhfp);
@@ -582,20 +528,14 @@ xchar lev;
g.level_info[lev].flags |= VISITED;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.hackpid, sizeof g.hackpid);
if (nhfp->fieldlevel)
sfo_int(nhfp, &g.hackpid, "gamestate", "g.hackpid", 1);
#ifdef TOS
tlev = lev;
tlev &= 0x00ff;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &tlev, sizeof tlev);
if (nhfp->fieldlevel)
sfo_short(nhfp, &tlev, "gamestate", "tlev", 1);
#else
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &lev, sizeof lev);
if (nhfp->fieldlevel)
sfo_xchar(nhfp, &lev, "gamestate", "dlvl", 1);
#endif
}
@@ -623,24 +563,6 @@ xchar lev;
bwrite(nhfp->fd, (genericptr_t) &g.level.flags, sizeof g.level.flags);
bwrite(nhfp->fd, (genericptr_t) g.doors, sizeof g.doors);
}
if (nhfp->fieldlevel) {
int i, c, r;
for (c = 0; c < COLNO; ++c)
for (r = 0; r < ROWNO; ++r)
sfo_schar(nhfp, &g.lastseentyp[c][r], "lev", "g.lastseentyp", 1);
sfo_long(nhfp, &g.monstermoves, "lev", "timestmp", 1);
sfo_stairway(nhfp, &g.upstair, "lev", "g.upstair", 1);
sfo_stairway(nhfp, &g.dnstair, "lev", "g.dnstair", 1);
sfo_stairway(nhfp, &g.upladder, "lev", "g.upladder", 1);
sfo_stairway(nhfp, &g.dnladder, "lev", "g.dnladder", 1);
sfo_stairway(nhfp, &g.sstairs, "lev", "g.sstairs", 1);
sfo_dest_area(nhfp, &g.updest, "lev", "g.updest", 1);
sfo_dest_area(nhfp, &g.dndest, "lev", "g.dndest", 1);
sfo_levelflags(nhfp, &g.level.flags, "lev", "g.level.flags", 1);
for (i = 0; i < DOORMAX; ++i)
sfo_nhcoord(nhfp, &g.doors[i], "lev", "door", 1);
}
save_rooms(nhfp); /* no dynamic memory to reclaim */
/* from here on out, saving also involves allocated memory cleanup */
@@ -719,10 +641,6 @@ boolean rlecomp;
bwrite(nhfp->fd, (genericptr_t) &match, sizeof (uchar));
bwrite(nhfp->fd, (genericptr_t) rgrm, sizeof (struct rm));
}
if (nhfp->fieldlevel) {
sfo_uchar(nhfp, &match, "levl", "match", 1);
sfo_rm(nhfp, rgrm, "levl", "rgrm", 1);
}
/* start encoding again. we have at least 1 rm
in the next run, viz. this one. */
match = 1;
@@ -735,10 +653,6 @@ boolean rlecomp;
bwrite(nhfp->fd, (genericptr_t) &match, sizeof (uchar));
bwrite(nhfp->fd, (genericptr_t) rgrm, sizeof (struct rm));
}
if (nhfp->fieldlevel) {
sfo_uchar(nhfp, &match, "levl", "match", 1);
sfo_rm(nhfp, rgrm, "levl", "rgrm", 1);
}
}
return;
}
@@ -748,13 +662,6 @@ boolean rlecomp;
if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) levl, sizeof levl);
}
if (nhfp->fieldlevel) {
int c, r;
for (c = 0; c < COLNO; ++c)
for (r = 0; r < ROWNO; ++r)
sfo_rm(nhfp, &g.level.locations[c][r], "room", "levl", 1);
}
}
/* used when saving a level and also when saving dungeon overview data */
@@ -770,8 +677,6 @@ struct cemetery **cemeteryaddr;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &flag, sizeof flag);
if (nhfp->fieldlevel)
sfo_int(nhfp, &flag, "cemetery", "cemetery_flag", 1);
}
nextbones = *cemeteryaddr;
while ((thisbones = nextbones) != 0) {
@@ -779,8 +684,6 @@ struct cemetery **cemeteryaddr;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) thisbones, sizeof *thisbones);
if (nhfp->fieldlevel)
sfo_cemetery(nhfp, thisbones, "cemetery", "cemetery", 1);
}
if (release_data(nhfp))
free((genericptr_t) thisbones);
@@ -802,15 +705,11 @@ NHFILE *nhfp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &xl, sizeof xl);
if (nhfp->fieldlevel)
sfo_unsigned(nhfp, &xl, "damage", "damage_count", 1);
}
while (xl--) {
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) damageptr, sizeof *damageptr);
if (nhfp->fieldlevel)
sfo_damage(nhfp, damageptr, "damage", "damage", 1);
}
tmp_dam = damageptr;
damageptr = damageptr->next;
@@ -833,22 +732,14 @@ struct obj *otmp;
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
bwrite(nhfp->fd, (genericptr_t) otmp, buflen);
}
if (nhfp->fieldlevel) {
sfo_int(nhfp, &buflen, "obj", "obj_length", 1);
sfo_obj(nhfp, otmp, "obj", "obj", 1);
}
if (otmp->oextra) {
buflen = ONAME(otmp) ? (int) strlen(ONAME(otmp)) + 1 : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "obj", "oname_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) ONAME(otmp), buflen);
if (nhfp->fieldlevel)
sfo_str(nhfp, ONAME(otmp), "obj", "oname", buflen);
}
/* defer to savemon() for this one */
if (OMONST(otmp)) {
@@ -856,43 +747,29 @@ struct obj *otmp;
} else {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &zerobuf, sizeof zerobuf);
if (nhfp->fieldlevel)
sfo_int(nhfp, &zerobuf, "obj", "omonst_length", 1);
}
buflen = OMID(otmp) ? (int) sizeof (unsigned) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "obj", "omid_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OMID(otmp), buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "obj", "omid_length", 1);
}
/* TODO: post 3.6.x, get rid of this */
buflen = OLONG(otmp) ? (int) sizeof (long) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "obj", "olong_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OLONG(otmp), buflen);
if (nhfp->fieldlevel)
sfo_long(nhfp, OLONG(otmp), "obj", "olong", 1);
}
buflen = OMAILCMD(otmp) ? (int) strlen(OMAILCMD(otmp)) + 1 : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "obj", "omailcmd_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OMAILCMD(otmp), buflen);
if (nhfp->fieldlevel)
sfo_str(nhfp, OMAILCMD(otmp), "obj", "omailcmd", buflen);
}
}
}
@@ -943,8 +820,6 @@ register struct obj *otmp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &minusone, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &minusone, "obj", "obj_length", 1);
}
}
@@ -962,83 +837,53 @@ struct monst *mtmp;
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
bwrite(nhfp->fd, (genericptr_t) mtmp, buflen);
}
if (nhfp->fieldlevel) {
sfo_int(nhfp, &buflen, "mon", "monst_length", 1);
sfo_monst(nhfp, mtmp, "mon", "monst", 1);
}
if (mtmp->mextra) {
buflen = MNAME(mtmp) ? (int) strlen(MNAME(mtmp)) + 1 : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "mname_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) MNAME(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_str(nhfp, MNAME(mtmp), "mon", "mname", buflen);
}
buflen = EGD(mtmp) ? (int) sizeof (struct egd) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "egd_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) EGD(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_egd(nhfp, EGD(mtmp), "mon", "egd", 1);
}
buflen = EPRI(mtmp) ? (int) sizeof (struct epri) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "epri_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) EPRI(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_epri(nhfp, EPRI(mtmp), "mon", "epri", 1);
}
buflen = ESHK(mtmp) ? (int) sizeof (struct eshk) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "eshk_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) ESHK(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_eshk(nhfp, ESHK(mtmp), "mon", "eshk", 1);
}
buflen = EMIN(mtmp) ? (int) sizeof (struct emin) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "emin_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) EMIN(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_emin(nhfp, EMIN(mtmp), "mon", "emin", 1);
}
buflen = EDOG(mtmp) ? (int) sizeof (struct edog) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &buflen, "mon", "edog_length", 1);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) EDOG(mtmp), buflen);
if (nhfp->fieldlevel)
sfo_edog(nhfp, EDOG(mtmp), "mon", "edog", 1);
}
/* mcorpsenm is inline int rather than pointer to something,
so doesn't need to be preceded by a length field */
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &MCORPSENM(mtmp), sizeof MCORPSENM(mtmp));
if (nhfp->fieldlevel)
sfo_int(nhfp, &MCORPSENM(mtmp), "mon", "mcorpsenm", 1);
}
}
@@ -1073,8 +918,6 @@ register struct monst *mtmp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &minusone, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &minusone, "mon", "monst_length", 1);
}
}
@@ -1092,8 +935,6 @@ register struct trap *trap;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) trap, sizeof *trap);
if (nhfp->fieldlevel)
sfo_trap(nhfp, trap, "trap", "trap", 1);
}
if (release_data(nhfp))
dealloc_trap(trap);
@@ -1102,8 +943,6 @@ register struct trap *trap;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &zerotrap, sizeof zerotrap);
if (nhfp->fieldlevel)
sfo_trap(nhfp, &zerotrap, "trap", "trap", 1);
}
}
@@ -1125,8 +964,6 @@ NHFILE *nhfp;
if (f1->fid >= 0 && perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) f1, sizeof *f1);
if (nhfp->fieldlevel)
sfo_fruit(nhfp, f1, "fruit", "fruit", 1);
}
if (release_data(nhfp))
dealloc_fruit(f1);
@@ -1135,8 +972,6 @@ NHFILE *nhfp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &zerofruit, sizeof zerofruit);
if (nhfp->fieldlevel)
sfo_fruit(nhfp, &zerofruit, "fruit", "terminator", 1);
}
if (release_data(nhfp))
g.ffruit = 0;
@@ -1156,16 +991,12 @@ NHFILE *nhfp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &cnt, sizeof cnt);
if (nhfp->fieldlevel)
sfo_int(nhfp, &cnt, "levchn", "lev_count", 1);
}
for (tmplev = g.sp_levchn; tmplev; tmplev = tmplev2) {
tmplev2 = tmplev->next;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) tmplev, sizeof *tmplev);
if (nhfp->fieldlevel)
sfo_s_level(nhfp, tmplev, "levchn", "s_level", 1);
}
if (release_data(nhfp))
free((genericptr_t) tmplev);
@@ -1187,10 +1018,6 @@ NHFILE *nhfp;
bwrite(nhfp->fd, (genericptr_t) g.plname, plsiztmp);
bufon(nhfp->fd);
}
if (nhfp->fieldlevel) {
sfo_int(nhfp, &plsiztmp, "plname", "plname_size", 1);
sfo_str(nhfp, g.plname, "plname", "g.plname", plsiztmp);
}
return;
}
@@ -1218,16 +1045,10 @@ NHFILE *nhfp;
bwrite(nhfp->fd, (genericptr_t) &msglen, sizeof msglen);
bwrite(nhfp->fd, (genericptr_t) msg, msglen);
}
if (nhfp->fieldlevel) {
sfo_int(nhfp, &msglen, "msghistory", "msghistory_length", 1);
sfo_str(nhfp, msg, "msghistory", "msg", msglen);
}
++msgcount;
}
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &minusone, sizeof (int));
if (nhfp->fieldlevel)
sfo_int(nhfp, &minusone, "msghistory", "msghistory_length", 1);
}
debugpline1("Stored %d messages into savefile.", msgcount);
/* note: we don't attempt to handle release_data() here */
@@ -1254,9 +1075,6 @@ NHFILE *nhfp;
bwrite(nhfp->fd, (genericptr_t) &sfsaveinfo, (unsigned) sizeof sfsaveinfo);
bufon(nhfp->fd);
}
if (nhfp->fieldlevel) {
sfo_savefile_info(nhfp, &sfsaveinfo, "savefileinfo", "savefile_info", 1);
}
return;
}