Alchemy smock reduces chances of dipped potions exploding
This commit is contained in:
@@ -1517,6 +1517,7 @@ hitting with Ogresmasher gives a higher chance of knockback
|
|||||||
Snickersnee can hit at a distance once per turn for free
|
Snickersnee can hit at a distance once per turn for free
|
||||||
the engraving pristine text field was not being appropriately populated during
|
the engraving pristine text field was not being appropriately populated during
|
||||||
level creation
|
level creation
|
||||||
|
worn alchemy smock reduces chances of dipped potions exploding
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
||||||
|
|||||||
+27
-16
@@ -42,6 +42,7 @@ staticfn int dip_hands_ok(struct obj *);
|
|||||||
staticfn void hold_potion(struct obj *, const char *, const char *,
|
staticfn void hold_potion(struct obj *, const char *, const char *,
|
||||||
const char *);
|
const char *);
|
||||||
staticfn void poof(struct obj *);
|
staticfn void poof(struct obj *);
|
||||||
|
staticfn boolean dip_potion_explosion(struct obj *, int);
|
||||||
staticfn int potion_dip(struct obj *obj, struct obj *potion);
|
staticfn int potion_dip(struct obj *obj, struct obj *potion);
|
||||||
|
|
||||||
/* used to indicate whether quaff or dip has skipped an opportunity to
|
/* used to indicate whether quaff or dip has skipped an opportunity to
|
||||||
@@ -2393,6 +2394,31 @@ poof(struct obj *potion)
|
|||||||
useup(potion);
|
useup(potion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* do dipped potion(s) explode? */
|
||||||
|
staticfn boolean
|
||||||
|
dip_potion_explosion(struct obj *obj, int dmg)
|
||||||
|
{
|
||||||
|
if (obj->cursed || obj->otyp == POT_ACID
|
||||||
|
|| (obj->otyp == POT_OIL && obj->lamplit)
|
||||||
|
|| !rn2((uarmc && uarmc->otyp == ALCHEMY_SMOCK) ? 30 : 10)) {
|
||||||
|
/* it would be better to use up the whole stack in advance
|
||||||
|
of the message, but we can't because we need to keep it
|
||||||
|
around for potionbreathe() [and we can't set obj->in_use
|
||||||
|
to 'amt' because that's not implemented] */
|
||||||
|
obj->in_use = 1;
|
||||||
|
pline("%sThey explode!", !Deaf ? "BOOM! " : "");
|
||||||
|
wake_nearto(u.ux, u.uy, (BOLT_LIM + 1) * (BOLT_LIM + 1));
|
||||||
|
exercise(A_STR, FALSE);
|
||||||
|
if (!breathless(gy.youmonst.data) || haseyes(gy.youmonst.data))
|
||||||
|
potionbreathe(obj);
|
||||||
|
useupall(obj);
|
||||||
|
losehp(dmg, /* not physical damage */
|
||||||
|
"alchemic blast", KILLED_BY_AN);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* called by dodip() or dip_into() after obj and potion have been chosen */
|
/* called by dodip() or dip_into() after obj and potion have been chosen */
|
||||||
staticfn int
|
staticfn int
|
||||||
potion_dip(struct obj *obj, struct obj *potion)
|
potion_dip(struct obj *obj, struct obj *potion)
|
||||||
@@ -2494,23 +2520,8 @@ potion_dip(struct obj *obj, struct obj *potion)
|
|||||||
useup(potion); /* now gone */
|
useup(potion); /* now gone */
|
||||||
/* Mixing potions is dangerous...
|
/* Mixing potions is dangerous...
|
||||||
KMH, balance patch -- acid is particularly unstable */
|
KMH, balance patch -- acid is particularly unstable */
|
||||||
if (obj->cursed || obj->otyp == POT_ACID
|
if (dip_potion_explosion(obj, amt + rnd(9)))
|
||||||
|| (obj->otyp == POT_OIL && obj->lamplit) || !rn2(10)) {
|
|
||||||
/* it would be better to use up the whole stack in advance
|
|
||||||
of the message, but we can't because we need to keep it
|
|
||||||
around for potionbreathe() [and we can't set obj->in_use
|
|
||||||
to 'amt' because that's not implemented] */
|
|
||||||
obj->in_use = 1;
|
|
||||||
pline("%sThey explode!", !Deaf ? "BOOM! " : "");
|
|
||||||
wake_nearto(u.ux, u.uy, (BOLT_LIM + 1) * (BOLT_LIM + 1));
|
|
||||||
exercise(A_STR, FALSE);
|
|
||||||
if (!breathless(gy.youmonst.data) || haseyes(gy.youmonst.data))
|
|
||||||
potionbreathe(obj);
|
|
||||||
useupall(obj);
|
|
||||||
losehp(amt + rnd(9), /* not physical damage */
|
|
||||||
"alchemic blast", KILLED_BY_AN);
|
|
||||||
return ECMD_TIME;
|
return ECMD_TIME;
|
||||||
}
|
|
||||||
|
|
||||||
obj->blessed = obj->cursed = obj->bknown = 0;
|
obj->blessed = obj->cursed = obj->bknown = 0;
|
||||||
if (Blind || Hallucination)
|
if (Blind || Hallucination)
|
||||||
|
|||||||
Reference in New Issue
Block a user