Exemplo n.º 1
0
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
/*--------------------------------------------------------*/
}
Exemplo n.º 2
0
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 */
}
Exemplo n.º 3
0
Arquivo: save.c Projeto: mbi/NitroHack
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);
}