More unpolyable unifying

... and fix the potion dipping case.
This commit is contained in:
Pasi Kallinen
2020-11-17 18:00:40 +02:00
parent 03d1eed0b5
commit e100d1a137
3 changed files with 13 additions and 6 deletions

View File

@@ -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 *));

View File

@@ -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;

View File

@@ -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;
}