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.
Bitfield(lamplit,1); /* a light-source -- can be lit */
#ifdef INVISIBLE_OBJECTS
Bitfield(oinvis,1); /* invisible */
+#else
+ Bitfield(oreserved1,1);
#endif
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(bypass,1); /* mark this as an object to be skipped by bhito() */
dropy(otmp);
sellobj_state(SELL_NORMAL);
} else {
- newolong(otmp); /* hack to prevent merge */
+ otmp->nomerge = 1; /* used to prevent merge */
otmp = addinv(otmp);
- free_olong(otmp);
+ otmp->nomerge = 0;
}
}
return(otmp);
obj->bypass != otmp->bypass)
return(FALSE);
+ if (obj->nomerge) /* explicitly marked to prevent merge */
+ return FALSE;
+
if ((obj->oclass==WEAPON_CLASS || obj->oclass==ARMOR_CLASS) &&
(obj->oerodeproof!=otmp->oerodeproof || obj->rknown!=otmp->rknown))
return FALSE;