diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 981a54159..9ebe6f493 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1300,6 +1300,8 @@ starting inventory: magic markers are more likely (guaranteed for Wizards), but have fewer charges early dungeon (pre-Sokoban) generates extra useful survivability items potion of healing is much more common, and has a unique price +alchemy may affect only a portion of the dipped potions if a large + stack is dipped (especially if that stack is diluted) Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/src/potion.c b/src/potion.c index fab7286e6..91e59ad02 100644 --- a/src/potion.c +++ b/src/potion.c @@ -2438,11 +2438,18 @@ potion_dip(struct obj *obj, struct obj *potion) magic = (mixture != STRANGE_OBJECT) ? objects[mixture].oc_magic : (objects[obj->otyp].oc_magic || objects[potion->otyp].oc_magic); Strcpy(qbuf, "The"); /* assume full stack */ - if (amt > (magic ? 3 : 7)) { - /* trying to dip multiple potions will usually affect only a + if (amt > (obj->odiluted ? 2 : magic ? 3 : 7)) { + /* Trying to dip multiple potions will usually affect only a subset; pick an amount between 3 and 8, inclusive, for magic - potion result, between 7 and N for non-magic */ - if (magic) + potion result, between 7 and N for non-magic. If diluted + potions are being dipped, only two are affected; this is a + balance fix to prevent cheap mass alchemy of the (very + common) potion of healing into the (very valuable) potion of + full healing, whilst permitting both healing->extra healing + and extra healing->full healing. */ + if (obj->odiluted) + amt = 2; + else if (magic) amt = rnd(min(amt, 8) - (3 - 1)) + (3 - 1); /* 1..6 + 2 */ else amt = rnd(amt - (7 - 1)) + (7 - 1); /* 1..(N-6) + 6 */