void savelev(int fd) { #ifndef NOWORM struct wseg *wtmp; struct wseg *wtmp2; int tmp; #endif if(fd < 0) { panic("Save on bad file!"); } bwrite(fd, (char *)levl, sizeof(levl)); bwrite(fd, (char *)&moves, sizeof(long)); bwrite(fd, (char *)&xupstair, sizeof(xupstair)); bwrite(fd, (char *)&yupstair, sizeof(yupstair)); bwrite(fd, (char *)&xdnstair, sizeof(xdnstair)); bwrite(fd, (char *)&ydnstair, sizeof(ydnstair)); savemonchn(fd, fmon); savegenchn(fd, fgold); savegenchn(fd, ftrap); saveobjchn(fd, fobj); saveobjchn(fd, billobjs); billobjs = 0; save_engravings(fd); #ifndef QUEST bwrite(fd, (char *)rooms, sizeof(rooms)); bwrite(fd, (char *)doors, sizeof(doors)); #endif ftrap = 0; fgold = 0; fobj = 0; /*--------------------------------------------------------*/ #ifndef NOWORM extern struct wseg *wsegs[32]; extern long wgrowtime[32]; bwrite(fd, (char *)wsegs, sizeof(wsegs)); for(tmp = 1; tmp < 32; ++tmp) { for(wtmp = wsegs[tmp]; wtmp != 0; wtmp = wtmp2) { wtmp2 = wtmp->nseg; bwrite(fd, (char *)wtmp, sizeof(struct wseg)); } wsegs[tmp] = 0; } bwrite(fd, (char *)wgrowtime, sizeof(wgrowtime)); #endif /*--------------------------------------------------------*/ }
void savelev(int fd, xchar lev) { #ifndef NOWORM struct wseg *wtmp, *wtmp2; int tmp; #endif /* NOWORM */ if (fd < 0) panic("Save on bad file!"); /* impossible */ if (lev >= 0 && lev <= MAXLEVEL) level_exists[lev] = TRUE; bwrite(fd, &hackpid, sizeof(hackpid)); bwrite(fd, &lev, sizeof(lev)); bwrite(fd, levl, sizeof(levl)); bwrite(fd, &moves, sizeof(long)); bwrite(fd, &xupstair, sizeof(xupstair)); bwrite(fd, &yupstair, sizeof(yupstair)); bwrite(fd, &xdnstair, sizeof(xdnstair)); bwrite(fd, &ydnstair, sizeof(ydnstair)); savemonchn(fd, fmon); savegoldchn(fd, fgold); savetrapchn(fd, ftrap); saveobjchn(fd, fobj); saveobjchn(fd, billobjs); billobjs = 0; save_engravings(fd); #ifndef QUEST bwrite(fd, rooms, sizeof(rooms)); bwrite(fd, doors, sizeof(doors)); #endif /* QUEST */ fgold = 0; ftrap = 0; fmon = 0; fobj = 0; #ifndef NOWORM bwrite(fd, wsegs, sizeof(wsegs)); for (tmp = 1; tmp < 32; tmp++) { for (wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2) { wtmp2 = wtmp->nseg; bwrite(fd, wtmp, sizeof(struct wseg)); } wsegs[tmp] = 0; } bwrite(fd, wgrowtime, sizeof(wgrowtime)); #endif /* NOWORM */ }
void savelev(struct memfile *mf, xchar levnum) { int x, y; unsigned int lflags; struct level *lev = levels[levnum]; if (iflags.purge_monsters) { /* purge any dead monsters (necessary if we're starting * a panic save rather than a normal one, or sometimes * when changing levels without taking time -- e.g. * create statue trap then immediately level teleport) */ dmonsfree(lev); } mfmagic_set(mf, LEVEL_MAGIC); mwrite8(mf, lev->z.dnum); mwrite8(mf, lev->z.dlevel); mwrite(mf, lev->levname, sizeof(lev->levname)); for (x = 0; x < COLNO; x++) for (y = 0; y < ROWNO; y++) save_location(mf, &lev->locations[x][y]); mwrite32(mf, lev->lastmoves); mwrite(mf, &lev->upstair, sizeof(stairway)); mwrite(mf, &lev->dnstair, sizeof(stairway)); mwrite(mf, &lev->upladder, sizeof(stairway)); mwrite(mf, &lev->dnladder, sizeof(stairway)); mwrite(mf, &lev->sstairs, sizeof(stairway)); mwrite(mf, &lev->updest, sizeof(dest_area)); mwrite(mf, &lev->dndest, sizeof(dest_area)); mwrite8(mf, lev->flags.nfountains); mwrite8(mf, lev->flags.nsinks); lflags = (lev->flags.has_shop << 31) | (lev->flags.has_vault << 30) | (lev->flags.has_zoo << 29) | (lev->flags.has_court << 28) | (lev->flags.has_morgue << 27) | (lev->flags.has_beehive << 26) | (lev->flags.has_barracks << 25) | (lev->flags.has_temple << 24) | (lev->flags.has_swamp << 23) | (lev->flags.noteleport << 22) | (lev->flags.hardfloor << 21) | (lev->flags.nommap << 20) | (lev->flags.hero_memory << 19) | (lev->flags.shortsighted << 18) | (lev->flags.graveyard << 17) | (lev->flags.is_maze_lev << 16) | (lev->flags.is_cavernous_lev << 15) | (lev->flags.arboreal << 14) | (lev->flags.forgotten << 13); mwrite32(mf, lflags); mwrite(mf, lev->doors, sizeof(lev->doors)); save_rooms(mf, lev); /* no dynamic memory to reclaim */ /* must be saved before mons, objs, and buried objs */ save_timers(mf, lev, RANGE_LEVEL); save_light_sources(mf, lev, RANGE_LEVEL); savemonchn(mf, lev->monlist); save_worm(mf, lev); /* save worm information */ savetrapchn(mf, lev->lev_traps); saveobjchn(mf, lev->objlist); saveobjchn(mf, lev->buriedobjlist); saveobjchn(mf, lev->billobjs); save_engravings(mf, lev); savedamage(mf, lev); save_regions(mf, lev); }