Artifact and #offer rebalance, part 1: sacrifice gifts

In 3.6, artifact gifts are often either a) entirely useless or
b) gamebreaking, neither of which is really ideal from a balance
perspective.

This commit aims to make artifact gifts more useful in the early
game by greatly increasing the chance for situational artifacts to
generate positively enchanted.  However, the most powerful
artifacts will now only be gifted if you offer a high-value corpse,
meaning that they are only likely to be accessible later in the
game.  The selection of which artifact to gift has become more
complicated in order to a) increase the chance that it fits the
character and b) reduce cheese strategies (e.g. it is no longer
possible for elves to force the gifting of Stormbringer as the
first sacrifice gift).
This commit is contained in:
Alex Smith
2024-12-12 03:14:47 +00:00
parent aedb24d343
commit d87cadaf73
8 changed files with 163 additions and 83 deletions

View File

@@ -880,7 +880,7 @@ mksobj_init(struct obj *otmp, boolean artif)
otmp->opoisoned = 1;
if (artif && !rn2(20 + (10 * nartifact_exist())))
otmp = mk_artifact(otmp, (aligntyp) A_NONE);
otmp = mk_artifact(otmp, (aligntyp) A_NONE, 99);
break;
case FOOD_CLASS:
otmp->oeaten = 0;
@@ -1084,7 +1084,7 @@ mksobj_init(struct obj *otmp, boolean artif)
} else
blessorcurse(otmp, 10);
if (artif && !rn2(40 + (10 * nartifact_exist())))
otmp = mk_artifact(otmp, (aligntyp) A_NONE);
otmp = mk_artifact(otmp, (aligntyp) A_NONE, 99);
/* simulate lacquered armor for samurai */
if (Role_if(PM_SAMURAI) && otmp->otyp == SPLINT_MAIL
&& (svm.moves <= 1 || In_quest(&u.uz))) {
@@ -1230,7 +1230,7 @@ mksobj(int otyp, boolean init, boolean artif)
/* unique objects may have an associated artifact entry */
if (objects[otyp].oc_unique && !otmp->oartifact)
otmp = mk_artifact(otmp, (aligntyp) A_NONE);
otmp = mk_artifact(otmp, (aligntyp) A_NONE, 99);
otmp->owt = weight(otmp);
return otmp;
}