oextra follow-up - merging (trunk only)
It seemed inappropriate to allocate and tack on an oextra structure just to mark it as unmergable, and the oextra struct itself wouldn't be released until a save/restore took place. This uses one of the freed up oattached bits to prevent the merge.
This commit is contained in:
+4
-1
@@ -94,9 +94,12 @@ struct obj {
|
|||||||
Bitfield(lamplit,1); /* a light-source -- can be lit */
|
Bitfield(lamplit,1); /* a light-source -- can be lit */
|
||||||
#ifdef INVISIBLE_OBJECTS
|
#ifdef INVISIBLE_OBJECTS
|
||||||
Bitfield(oinvis,1); /* invisible */
|
Bitfield(oinvis,1); /* invisible */
|
||||||
|
#else
|
||||||
|
Bitfield(oreserved1,1);
|
||||||
#endif
|
#endif
|
||||||
Bitfield(greased,1); /* covered with grease */
|
Bitfield(greased,1); /* covered with grease */
|
||||||
/* 2 free bits */
|
Bitfield(nomerge,1); /* set temporarily to prevent merging */
|
||||||
|
/* 1 free bit */
|
||||||
|
|
||||||
Bitfield(in_use,1); /* for magic items before useup items */
|
Bitfield(in_use,1); /* for magic items before useup items */
|
||||||
Bitfield(bypass,1); /* mark this as an object to be skipped by bhito() */
|
Bitfield(bypass,1); /* mark this as an object to be skipped by bhito() */
|
||||||
|
|||||||
@@ -297,9 +297,9 @@ register struct obj *otmp;
|
|||||||
dropy(otmp);
|
dropy(otmp);
|
||||||
sellobj_state(SELL_NORMAL);
|
sellobj_state(SELL_NORMAL);
|
||||||
} else {
|
} else {
|
||||||
newolong(otmp); /* hack to prevent merge */
|
otmp->nomerge = 1; /* used to prevent merge */
|
||||||
otmp = addinv(otmp);
|
otmp = addinv(otmp);
|
||||||
free_olong(otmp);
|
otmp->nomerge = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(otmp);
|
return(otmp);
|
||||||
|
|||||||
@@ -2416,6 +2416,9 @@ mergable(otmp, obj) /* returns TRUE if obj & otmp can be merged */
|
|||||||
obj->bypass != otmp->bypass)
|
obj->bypass != otmp->bypass)
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
|
|
||||||
|
if (obj->nomerge) /* explicitly marked to prevent merge */
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if ((obj->oclass==WEAPON_CLASS || obj->oclass==ARMOR_CLASS) &&
|
if ((obj->oclass==WEAPON_CLASS || obj->oclass==ARMOR_CLASS) &&
|
||||||
(obj->oerodeproof!=otmp->oerodeproof || obj->rknown!=otmp->rknown))
|
(obj->oerodeproof!=otmp->oerodeproof || obj->rknown!=otmp->rknown))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
Reference in New Issue
Block a user