static void rest_room (int fd, struct mkroom *r) { short i; mread(fd, (void *) r, sizeof(struct mkroom)); for(i=0; i<r->nsubrooms; i++) { r->sbrooms[i] = &subrooms[nsubroom]; rest_room(fd, &subrooms[nsubroom]); subrooms[nsubroom++].resident = (struct monst *)0; } }
void rest_rooms (int fd) { short i; mread(fd, (void *) &nroom, sizeof(nroom)); nsubroom = 0; for(i = 0; i<nroom; i++) { rest_room(fd, &rooms[i]); rooms[i].resident = (struct monst *)0; } rooms[nroom].hx = -1; /* restore ending flags */ subrooms[nsubroom].hx = -1; }
/* * rest_rooms : That's for restoring rooms. Read the rooms structure from * the disk. */ void rest_rooms(struct memfile *mf, struct level *lev) { short i; mfmagic_check(mf, ROOMS_MAGIC); /* "RDAT" */ lev->nroom = mread32(mf); lev->nsubroom = 0; for (i = 0; i < lev->nroom; i++) { rest_room(mf, lev, &lev->rooms[i]); lev->rooms[i].resident = NULL; } lev->rooms[lev->nroom].hx = -1; /* restore ending flags */ lev->subrooms[lev->nsubroom].hx = -1; }
static void rest_room(struct memfile *mf, struct level *lev, struct mkroom *r) { short i; r->lx = mread8(mf); r->hx = mread8(mf); r->ly = mread8(mf); r->hy = mread8(mf); r->rtype = mread8(mf); r->rlit = mread8(mf); r->doorct = mread8(mf); r->fdoor = mread8(mf); r->nsubrooms = mread8(mf); r->irregular = mread8(mf); for (i = 0; i < r->nsubrooms; i++) { r->sbrooms[i] = &lev->subrooms[lev->nsubroom]; rest_room(mf, lev, &lev->subrooms[lev->nsubroom]); lev->subrooms[lev->nsubroom++].resident = NULL; } }