object save/restore (trunk only)

Make the same simplification to save and restore of obj->oextra as
was done yesterday for monst->mextra:  no need for a set of all 0 sizes
when the whole thing is null.  Bumps EDITLEVEL again.
This commit is contained in:
nethack.rankin
2009-02-01 02:16:47 +00:00
parent 84ca1773e5
commit 2904f49767
3 changed files with 32 additions and 36 deletions

View File

@@ -13,7 +13,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
#define EDITLEVEL 42
#define EDITLEVEL 43
#define COPYRIGHT_BANNER_A \
"NetHack, Copyright 1985-2009"

View File

@@ -229,56 +229,58 @@ boolean ghostly;
free((genericptr_t)tmp_dam);
}
/* restore one object */
STATIC_OVL void
restobj(fd, otmp)
int fd;
struct obj *otmp;
{
int buflen;
mread(fd, (genericptr_t) otmp, sizeof(struct obj));
/* any saved pointers are mostly invalid */
otmp->nobj = (struct obj *)0;
otmp->oextra = (struct oextra *)0;
/* next object pointers are invalid; otmp->cobj needs to be left
as is--being non-null is key to restoring container contents */
otmp->nobj = otmp->nexthere = (struct obj *)0;
/* non-null oextra needs to be reconstructed */
if (otmp->oextra) {
otmp->oextra = newoextra();
/* read the length of the name and the name */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
/* oname - object's name */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) { /* includes terminating '\0' */
new_oname(otmp, buflen);
mread(fd, (genericptr_t) ONAME(otmp), buflen);
}
/* omonst */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
}
/* omonst - corpse or statue might retain full monster details */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
newomonst(otmp);
/* this is actually a monst struct, so we
can just defer to restmon() here */
restmon(fd, OMONST(otmp));
}
/* omid */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
}
/* omid - monster id number, connecting corpse to ghost */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
newomid(otmp);
mread(fd, (genericptr_t) OMID(otmp), buflen);
}
/* olong */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
}
/* olong - temporary gold */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
newolong(otmp);
mread(fd, (genericptr_t) OLONG(otmp), buflen);
}
/* omailcmd */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
}
/* omailcmd - feedback mechanism for scroll of mail */
mread(fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
char *omailcmd = (char *)alloc(buflen);
mread(fd, (genericptr_t) omailcmd, buflen);
new_omailcmd(otmp, omailcmd);
free((genericptr_t)omailcmd);
}
}
}
@@ -341,6 +343,7 @@ boolean ghostly, frozen;
return(first);
}
/* restore one monster */
STATIC_OVL void
restmon(fd, mtmp)
int fd;

View File

@@ -942,14 +942,7 @@ struct obj *otmp;
buflen = sizeof(struct obj);
bwrite(fd, (genericptr_t) &buflen, sizeof(int));
bwrite(fd, (genericptr_t) otmp, buflen);
if (!otmp->oextra) {
/* for oname, omonst, omid, olong, omailcmd */
bwrite(fd, (genericptr_t) &zerobuf, sizeof(int));
bwrite(fd, (genericptr_t) &zerobuf, sizeof(int));
bwrite(fd, (genericptr_t) &zerobuf, sizeof(int));
bwrite(fd, (genericptr_t) &zerobuf, sizeof(int));
bwrite(fd, (genericptr_t) &zerobuf, sizeof(int));
} else {
if (otmp->oextra) {
if (ONAME(otmp)) buflen = strlen(ONAME(otmp)) + 1;
else buflen = 0;
bwrite(fd, (genericptr_t) &buflen, sizeof buflen);