fix #H7256 - bug WRT eating rings
Wearing a negatively enchanted ring of increase <foo> would enhance the bonus gained from eating another ring of the same type when you got "the magic spreads through your body" effect so could be eploited. Conversely, wearing a positively enchanted one would make you lose that worn amount when gaining any bonus from eating one.
This commit is contained in:
@@ -60,6 +60,8 @@ make stone-to-flesh behave the same on statues of petrified monsters as it
|
|||||||
becoming a corpse when there's already a monster at statue's location)
|
becoming a corpse when there's already a monster at statue's location)
|
||||||
special level loader didn't support populating several types of special rooms
|
special level loader didn't support populating several types of special rooms
|
||||||
(ant hole, cockatrice nest, leprechaun hall)
|
(ant hole, cockatrice nest, leprechaun hall)
|
||||||
|
eating rings while polymorphed didn't handle bonus/penalty for increase damage,
|
||||||
|
increase accuracy, or protection correctly
|
||||||
|
|
||||||
|
|
||||||
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
@@ -1877,10 +1877,11 @@ int old, inc, typ;
|
|||||||
{
|
{
|
||||||
int absold, absinc, sgnold, sgninc;
|
int absold, absinc, sgnold, sgninc;
|
||||||
|
|
||||||
/* don't include any amount coming from worn rings */
|
/* don't include any amount coming from worn rings (caller handles
|
||||||
if (uright && uright->otyp == typ)
|
'protection' differently) */
|
||||||
|
if (uright && uright->otyp == typ && typ != RIN_PROTECTION)
|
||||||
old -= uright->spe;
|
old -= uright->spe;
|
||||||
if (uleft && uleft->otyp == typ)
|
if (uleft && uleft->otyp == typ && typ != RIN_PROTECTION)
|
||||||
old -= uleft->spe;
|
old -= uleft->spe;
|
||||||
absold = abs(old), absinc = abs(inc);
|
absold = abs(old), absinc = abs(inc);
|
||||||
sgnold = sgn(old), sgninc = sgn(inc);
|
sgnold = sgn(old), sgninc = sgn(inc);
|
||||||
@@ -1900,6 +1901,11 @@ int old, inc, typ;
|
|||||||
} else {
|
} else {
|
||||||
inc = 0; /* no further increase allowed via this method */
|
inc = 0; /* no further increase allowed via this method */
|
||||||
}
|
}
|
||||||
|
/* put amount from worn rings back */
|
||||||
|
if (uright && uright->otyp == typ && typ != RIN_PROTECTION)
|
||||||
|
old += uright->spe;
|
||||||
|
if (uleft && uleft->otyp == typ && typ != RIN_PROTECTION)
|
||||||
|
old += uleft->spe;
|
||||||
return old + inc;
|
return old + inc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1908,7 +1914,7 @@ accessory_has_effect(otmp)
|
|||||||
struct obj *otmp;
|
struct obj *otmp;
|
||||||
{
|
{
|
||||||
pline("Magic spreads through your body as you digest the %s.",
|
pline("Magic spreads through your body as you digest the %s.",
|
||||||
otmp->oclass == RING_CLASS ? "ring" : "amulet");
|
(otmp->oclass == RING_CLASS) ? "ring" : "amulet");
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
|
|||||||
Reference in New Issue
Block a user