From: Pasi Kallinen Date: Tue, 17 Nov 2020 16:00:40 +0000 (+0200) Subject: More unpolyable unifying X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e100d1a1372c95445a0bd7dce2165db9a6248646;p=nethack More unpolyable unifying ... and fix the potion dipping case. --- diff --git a/include/extern.h b/include/extern.h index 7b4600174..843cb73eb 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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 *)); diff --git a/src/potion.c b/src/potion.c index a0e2256ed..34ff6de8e 100644 --- a/src/potion.c +++ b/src/potion.c @@ -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; diff --git a/src/zap.c b/src/zap.c index b8fd955ae..edb4943d2 100644 --- a/src/zap.c +++ b/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; }