Пример #1
0
void savegame(struct memfile *mf)
{
	int count = 0;
	xchar ltmp;
	
	store_version(mf);
	
	/* Place flags, player info & moves at the beginning of the save.
	 * This makes it possible to read them in nh_get_savegame_status without
	 * parsing all the dungeon and level data */
	save_flags(mf);
	save_you(mf, &u);
	mwrite32(mf, moves);
	save_mon(mf, &youmonst);
	
	/* store dungeon layout */
	save_dungeon(mf);
	savelevchn(mf);
	
	/* store levels */
	for (ltmp = 1; ltmp <= maxledgerno(); ltmp++)
	    if (levels[ltmp])
		count++;
	mwrite32(mf, count);
	for (ltmp = 1; ltmp <= maxledgerno(); ltmp++) {
		if (!levels[ltmp])
		    continue;
		mwrite8(mf, ltmp); /* level number*/
		savelev(mf, ltmp); /* actual level*/
	}
	savegamestate(mf);
}
Пример #2
0
void save_obj(struct memfile *mf, struct obj *obj)
{
    unsigned int oflags;
    
    oflags = (obj->cursed << 31) | (obj->blessed << 30) | (obj->unpaid << 29) |
	     (obj->no_charge << 28) | (obj->known << 27) | (obj->dknown << 26) |
	     (obj->bknown << 25) | (obj->rknown << 24) | (obj->oeroded << 22) |
	     (obj->oeroded2 << 20) | (obj->oerodeproof << 19) | (obj->olocked << 18) |
	     (obj->obroken << 17) | (obj->otrapped << 16) | (obj->recharged << 13) |
	     (obj->lamplit << 12) | (obj->greased << 11) | (obj->oattached << 9) |
	     (obj->in_use << 8) | (obj->was_thrown << 7) | (obj->bypass << 6);
    
    mfmagic_set(mf, OBJ_MAGIC);
    
    mwrite32(mf, obj->onamelth);    
    mwrite32(mf, obj->o_id);
    mwrite32(mf, obj->owt);
    mwrite32(mf, obj->quan);
    mwrite32(mf, obj->corpsenm);
    mwrite32(mf, obj->oeaten);
    mwrite32(mf, obj->age);
    mwrite32(mf, obj->owornmask);
    mwrite32(mf, oflags);
    
    mwrite16(mf, obj->otyp);
    
    mwrite8(mf, obj->ox);
    mwrite8(mf, obj->oy);
    mwrite8(mf, obj->spe);
    mwrite8(mf, obj->oclass);
    mwrite8(mf, obj->invlet);
    mwrite8(mf, obj->oartifact);
    mwrite8(mf, obj->where);
    mwrite8(mf, obj->timed);
    /* no need to save the value of the cobj pointer, but we will need to know
     * if there is something in here that needs to be restored */
    mwrite8(mf, obj->cobj ? 1 : 0);
    
    if (obj->onamelth)
	mwrite(mf, ONAME(obj), obj->onamelth);
    
    if (obj->oattached == OATTACHED_MONST)
	save_mon(mf, (struct monst*)obj->oextra);
    else if (obj->oattached == OATTACHED_M_ID)
	mwrite32(mf, *(unsigned int*)obj->oextra);
}
Пример #3
0
static void savemonchn(struct memfile *mf, struct monst *mtmp)
{
	struct monst *mtmp2;
	unsigned int count = 0;
	
	mfmagic_set(mf, MONCHAIN_MAGIC);
	for (mtmp2 = mtmp; mtmp2; mtmp2 = mtmp2->nmon)
	    count++;
	mwrite32(mf, count);

	while (mtmp) {
	    mtmp2 = mtmp->nmon;
	    save_mon(mf, mtmp);
	    
	    if (mtmp->minvent)
		saveobjchn(mf, mtmp->minvent);
	    mtmp = mtmp2;
	}
}