More unpolyable unifying
... and fix the potion dipping case.
This commit is contained in:
@@ -3154,6 +3154,7 @@ E int FDECL(unturn_dead, (struct monst *));
|
||||
E void NDECL(unturn_you);
|
||||
E void FDECL(cancel_item, (struct obj *));
|
||||
E boolean FDECL(drain_item, (struct obj *, BOOLEAN_P));
|
||||
E boolean FDECL(obj_unpolyable, (struct obj *));
|
||||
E struct obj *FDECL(poly_obj, (struct obj *, int));
|
||||
E boolean FDECL(obj_resists, (struct obj *, int, int));
|
||||
E boolean FDECL(obj_shudders, (struct obj *));
|
||||
|
||||
@@ -1977,11 +1977,7 @@ dodip()
|
||||
goto poof;
|
||||
} else if (obj->otyp == POT_POLYMORPH || potion->otyp == POT_POLYMORPH) {
|
||||
/* some objects can't be polymorphed */
|
||||
if (obj->otyp == potion->otyp /* both POT_POLY */
|
||||
|| unpolyable(obj)
|
||||
|| obj == uball || obj == uskin
|
||||
|| obj_resists(obj->otyp == POT_POLYMORPH ? potion : obj,
|
||||
5, 95)) {
|
||||
if (obj_unpolyable(obj->otyp == POT_POLYMORPH ? potion : obj)) {
|
||||
pline1(nothing_happens);
|
||||
} else {
|
||||
short save_otyp = obj->otyp;
|
||||
|
||||
12
src/zap.c
12
src/zap.c
@@ -1476,6 +1476,16 @@ struct obj *obj;
|
||||
delobj(obj);
|
||||
}
|
||||
|
||||
/* Returns TRUE if obj resists polymorphing */
|
||||
boolean
|
||||
obj_unpolyable(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
return (unpolyable(obj)
|
||||
|| obj == uball || obj == uskin
|
||||
|| obj_resists(obj, 5, 95));
|
||||
}
|
||||
|
||||
/* classes of items whose current charge count carries over across polymorph
|
||||
*/
|
||||
static const char charged_objs[] = { WAND_CLASS, WEAPON_CLASS, ARMOR_CLASS,
|
||||
@@ -1964,7 +1974,7 @@ struct obj *obj, *otmp;
|
||||
switch (otmp->otyp) {
|
||||
case WAN_POLYMORPH:
|
||||
case SPE_POLYMORPH:
|
||||
if (unpolyable(obj) || obj_resists(obj, 5, 95)) {
|
||||
if (obj_unpolyable(obj)) {
|
||||
res = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user