Reduce yields for multi-step alchemy recipes

With potions of healing becoming much more common, the multi-step
alchemy recipe from potion of healing to potion of extra healing to
potion of full healing is likely to become even more overpowered
(and it was somewhat unbalancing even beforehand).

This change restricts alchemy involving diluted dipped potions to
alchemize only two potions at a time. This means that potions of
healing can stil be alchemized into potions of extra healing as
efficiently as before this commit, and so can potions of extra
healing into potions of full healing; but the multi-step recipe
is now limited by requiring a lot of potions of gain level or gain
energy. As such, this is intended to make potions of healing into
an item primarily useful in the early game, and discourage hoarding
them for the late game.
This commit is contained in:
Alex Smith
2023-12-02 06:47:28 +00:00
parent 62fb875931
commit e8ca614e5c
2 changed files with 13 additions and 4 deletions

View File

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

View File

@@ -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 */