Armor probability tweaks

Armor is now slightly more likely to generate outside Gehennom (at
the expense of gems that generate via random generation rather than
mineralisation or level rules).

Basic nonmagical armor (especially body armor) has had its generation
probabilities reduced *relative to other armor*, but outside
Gehennom, it is no less likely to generate (because armor in general
is now more likely to generate outside Gehennom). It is slightly less
likely to generate in Gehennom (but isn't typically needed in
quantity there).

Armor that has extrinsics is more likely to generate, both due to
having increased probability relative to other armor, and due to the
increased proportion of generated items being armor: this is the
primary goal of this change.

The intention behind this change is to increase the chance that
players naturally find useful armor (especially armor that they might
not have been planning to use, but that they can adapt their strategy
to make use of), rather than needing to wish for it: the chance of
finding useful armor is higher both in the Dungeons (due to the
increased probability) and in Gehennom (because it is more biased
towards armor that might be useful at that stage of the game).  In
practice, in 3.6.x (prior to this change and to wishing changes), it
was quite common for players to wish up an entire set of armor at the
Castle, ignoring almost everything they'd found so far that game; I'm
hoping this change encourages more wish variety rather than spending
the majority of wishes on armor.
This commit is contained in:
Alex Smith
2026-03-21 04:52:51 +00:00
parent f85b5b1c9d
commit 26fd5e7d73
2 changed files with 38 additions and 38 deletions

View File

@@ -455,12 +455,12 @@ HELM("fedora", NoDes,
1, 0, 0, 0, 0, 3, 1, 10, 0, CLOTH, CLR_BROWN, 1, 0, 0, 0, 0, 3, 1, 10, 0, CLOTH, CLR_BROWN,
FEDORA), FEDORA),
HELM("cornuthaum", "conical hat", HELM("cornuthaum", "conical hat",
0, 1, CLAIRVOYANT, 3, 1, 4, 80, 10, 1, CLOTH, CLR_BLUE, 0, 1, CLAIRVOYANT, 5, 1, 4, 80, 10, 1, CLOTH, CLR_BLUE,
/* name coined by devteam; confers clairvoyance for wizards, /* name coined by devteam; confers clairvoyance for wizards,
blocks clairvoyance if worn by role other than wizard */ blocks clairvoyance if worn by role other than wizard */
CORNUTHAUM), CORNUTHAUM),
HELM("dunce cap", "conical hat", HELM("dunce cap", "conical hat",
0, 1, 0, 3, 1, 4, 1, 10, 0, CLOTH, CLR_BLUE, 0, 1, 0, 5, 1, 4, 1, 10, 0, CLOTH, CLR_BLUE,
/* sets Int and Wis to fixed value of 6, so actually provides /* sets Int and Wis to fixed value of 6, so actually provides
protection against death caused by Int being drained below 3 */ protection against death caused by Int being drained below 3 */
DUNCE_CAP), DUNCE_CAP),
@@ -468,7 +468,7 @@ HELM("dented pot", NoDes,
1, 0, 0, 2, 0, 10, 8, 9, 0, IRON, CLR_BLACK, 1, 0, 0, 2, 0, 10, 8, 9, 0, IRON, CLR_BLACK,
DENTED_POT), DENTED_POT),
HELM("helm of brilliance", "crystal helmet", HELM("helm of brilliance", "crystal helmet",
0, 1, 0, 3, 1, 40, 50, 9, 0, GLASS, CLR_WHITE, 0, 1, 0, 6, 1, 40, 50, 9, 0, GLASS, CLR_WHITE,
/* used to be iron and shuffled as "etched helmet" but required /* used to be iron and shuffled as "etched helmet" but required
special case for the effect of iron armor on spell casting */ special case for the effect of iron armor on spell casting */
HELM_OF_BRILLIANCE), HELM_OF_BRILLIANCE),
@@ -477,13 +477,13 @@ HELM("helmet", "plumed helmet",
0, 0, 0, 10, 1, 30, 10, 9, 0, IRON, HI_METAL, 0, 0, 0, 10, 1, 30, 10, 9, 0, IRON, HI_METAL,
HELMET), HELMET),
HELM("helm of caution", "etched helmet", HELM("helm of caution", "etched helmet",
0, 1, WARNING, 3, 1, 50, 50, 9, 0, IRON, CLR_GREEN, 0, 1, WARNING, 6, 1, 50, 50, 9, 0, IRON, CLR_GREEN,
HELM_OF_CAUTION), HELM_OF_CAUTION),
HELM("helm of opposite alignment", "crested helmet", HELM("helm of opposite alignment", "crested helmet",
0, 1, 0, 6, 1, 50, 50, 9, 0, IRON, HI_METAL, 0, 1, 0, 10, 1, 50, 50, 9, 0, IRON, HI_METAL,
HELM_OF_OPPOSITE_ALIGNMENT), HELM_OF_OPPOSITE_ALIGNMENT),
HELM("helm of telepathy", "visored helmet", HELM("helm of telepathy", "visored helmet",
0, 1, TELEPAT, 2, 1, 50, 50, 9, 0, IRON, HI_METAL, 0, 1, TELEPAT, 4, 1, 50, 50, 9, 0, IRON, HI_METAL,
HELM_OF_TELEPATHY), HELM_OF_TELEPATHY),
/* suits of armor */ /* suits of armor */
@@ -554,19 +554,19 @@ DRGN_ARMR("yellow dragon scales", 0, ACID_RES, 500, 7, CLR_YELLOW,
#undef DRGN_ARMR #undef DRGN_ARMR
/* other suits */ /* other suits */
ARMOR("plate mail", NoDes, ARMOR("plate mail", NoDes,
1, 0, 1, 0, 44, 5, 450, 600, 3, 2, ARM_SUIT, IRON, HI_METAL, 1, 0, 1, 0, 40, 5, 450, 600, 3, 2, ARM_SUIT, IRON, HI_METAL,
PLATE_MAIL), PLATE_MAIL),
ARMOR("crystal plate mail", NoDes, ARMOR("crystal plate mail", NoDes,
1, 0, 1, 0, 10, 5, 415, 820, 3, 2, ARM_SUIT, GLASS, CLR_WHITE, 1, 0, 1, 0, 10, 5, 415, 820, 3, 2, ARM_SUIT, GLASS, CLR_WHITE,
CRYSTAL_PLATE_MAIL), CRYSTAL_PLATE_MAIL),
ARMOR("bronze plate mail", NoDes, ARMOR("bronze plate mail", NoDes,
1, 0, 1, 0, 25, 5, 450, 400, 4, 1, ARM_SUIT, COPPER, HI_COPPER, 1, 0, 1, 0, 23, 5, 450, 400, 4, 1, ARM_SUIT, COPPER, HI_COPPER,
BRONZE_PLATE_MAIL), BRONZE_PLATE_MAIL),
ARMOR("splint mail", NoDes, ARMOR("splint mail", NoDes,
1, 0, 1, 0, 62, 5, 400, 80, 4, 1, ARM_SUIT, IRON, HI_METAL, 1, 0, 1, 0, 57, 5, 400, 80, 4, 1, ARM_SUIT, IRON, HI_METAL,
SPLINT_MAIL), SPLINT_MAIL),
ARMOR("banded mail", NoDes, ARMOR("banded mail", NoDes,
1, 0, 1, 0, 72, 5, 350, 90, 4, 1, ARM_SUIT, IRON, HI_METAL, 1, 0, 1, 0, 66, 5, 350, 90, 4, 1, ARM_SUIT, IRON, HI_METAL,
BANDED_MAIL), BANDED_MAIL),
ARMOR("dwarvish mithril-coat", NoDes, ARMOR("dwarvish mithril-coat", NoDes,
1, 0, 0, 0, 10, 1, 150, 240, 4, 2, ARM_SUIT, MITHRIL, HI_SILVER, 1, 0, 0, 0, 10, 1, 150, 240, 4, 2, ARM_SUIT, MITHRIL, HI_SILVER,
@@ -575,28 +575,28 @@ ARMOR("elven mithril-coat", NoDes,
1, 0, 0, 0, 15, 1, 150, 240, 5, 2, ARM_SUIT, MITHRIL, HI_SILVER, 1, 0, 0, 0, 15, 1, 150, 240, 5, 2, ARM_SUIT, MITHRIL, HI_SILVER,
ELVEN_MITHRIL_COAT), ELVEN_MITHRIL_COAT),
ARMOR("chain mail", NoDes, ARMOR("chain mail", NoDes,
1, 0, 0, 0, 72, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL, 1, 0, 0, 0, 66, 5, 300, 75, 5, 1, ARM_SUIT, IRON, HI_METAL,
CHAIN_MAIL), CHAIN_MAIL),
ARMOR("orcish chain mail", "crude chain mail", ARMOR("orcish chain mail", "crude chain mail",
0, 0, 0, 0, 20, 5, 300, 75, 6, 1, ARM_SUIT, IRON, CLR_BLACK, 0, 0, 0, 0, 19, 5, 300, 75, 6, 1, ARM_SUIT, IRON, CLR_BLACK,
ORCISH_CHAIN_MAIL), ORCISH_CHAIN_MAIL),
ARMOR("scale mail", NoDes, ARMOR("scale mail", NoDes,
1, 0, 0, 0, 72, 5, 250, 45, 6, 1, ARM_SUIT, IRON, HI_METAL, 1, 0, 0, 0, 66, 5, 250, 45, 6, 1, ARM_SUIT, IRON, HI_METAL,
SCALE_MAIL), SCALE_MAIL),
ARMOR("studded leather armor", NoDes, ARMOR("studded leather armor", NoDes,
1, 0, 0, 0, 72, 3, 200, 15, 7, 1, ARM_SUIT, LEATHER, HI_LEATHER, 1, 0, 0, 0, 66, 3, 200, 15, 7, 1, ARM_SUIT, LEATHER, HI_LEATHER,
STUDDED_LEATHER_ARMOR), STUDDED_LEATHER_ARMOR),
ARMOR("ring mail", NoDes, ARMOR("ring mail", NoDes,
1, 0, 0, 0, 72, 5, 250, 100, 7, 1, ARM_SUIT, IRON, HI_METAL, 1, 0, 0, 0, 66, 5, 250, 100, 7, 1, ARM_SUIT, IRON, HI_METAL,
RING_MAIL), RING_MAIL),
ARMOR("orcish ring mail", "crude ring mail", ARMOR("orcish ring mail", "crude ring mail",
0, 0, 0, 0, 20, 5, 250, 80, 8, 1, ARM_SUIT, IRON, CLR_BLACK, 0, 0, 0, 0, 19, 5, 250, 80, 8, 1, ARM_SUIT, IRON, CLR_BLACK,
ORCISH_RING_MAIL), ORCISH_RING_MAIL),
ARMOR("leather armor", NoDes, ARMOR("leather armor", NoDes,
1, 0, 0, 0, 82, 3, 150, 5, 8, 1, ARM_SUIT, LEATHER, HI_LEATHER, 1, 0, 0, 0, 75, 3, 150, 5, 8, 1, ARM_SUIT, LEATHER, HI_LEATHER,
LEATHER_ARMOR), LEATHER_ARMOR),
ARMOR("leather jacket", NoDes, ARMOR("leather jacket", NoDes,
1, 0, 0, 0, 12, 0, 30, 10, 9, 0, ARM_SUIT, LEATHER, CLR_BLACK, 1, 0, 0, 0, 11, 0, 30, 10, 9, 0, ARM_SUIT, LEATHER, CLR_BLACK,
LEATHER_JACKET), LEATHER_JACKET),
/* shirts */ /* shirts */
@@ -624,58 +624,58 @@ CLOAK("oilskin cloak", "slippery cloak",
0, 0, 0, 8, 0, 10, 50, 9, 2, CLOTH, HI_CLOTH, 0, 0, 0, 8, 0, 10, 50, 9, 2, CLOTH, HI_CLOTH,
OILSKIN_CLOAK), OILSKIN_CLOAK),
CLOAK("robe", NoDes, CLOAK("robe", NoDes,
1, 1, 0, 3, 0, 15, 50, 8, 2, CLOTH, CLR_RED, ROBE), 1, 1, 0, 6, 0, 15, 50, 8, 2, CLOTH, CLR_RED, ROBE),
/* robe was adopted from slash'em, where it's worn as a suit /* robe was adopted from slash'em, where it's worn as a suit
rather than as a cloak and there are several variations */ rather than as a cloak and there are several variations */
CLOAK("alchemy smock", "apron", CLOAK("alchemy smock", "apron",
0, 1, POISON_RES, 9, 0, 10, 50, 9, 1, CLOTH, CLR_WHITE, 0, 1, POISON_RES, 11, 0, 10, 50, 9, 1, CLOTH, CLR_WHITE,
ALCHEMY_SMOCK), ALCHEMY_SMOCK),
CLOAK("leather cloak", NoDes, CLOAK("leather cloak", NoDes,
1, 0, 0, 8, 0, 15, 40, 9, 1, LEATHER, CLR_BROWN, 1, 0, 0, 8, 0, 15, 40, 9, 1, LEATHER, CLR_BROWN,
LEATHER_CLOAK), LEATHER_CLOAK),
/* with shuffled appearances... */ /* with shuffled appearances... */
CLOAK("cloak of protection", "tattered cape", CLOAK("cloak of protection", "tattered cape",
0, 1, PROTECTION, 9, 0, 10, 50, 7, 3, CLOTH, HI_CLOTH, 0, 1, PROTECTION, 11, 0, 10, 50, 7, 3, CLOTH, HI_CLOTH,
CLOAK_OF_PROTECTION), CLOAK_OF_PROTECTION),
/* cloak of protection is now the only item conferring MC 3 */ /* cloak of protection is now the only item conferring MC 3 */
CLOAK("cloak of invisibility", "opera cloak", CLOAK("cloak of invisibility", "opera cloak",
0, 1, INVIS, 10, 0, 10, 60, 9, 1, CLOTH, CLR_BRIGHT_MAGENTA, 0, 1, INVIS, 12, 0, 10, 60, 9, 1, CLOTH, CLR_BRIGHT_MAGENTA,
CLOAK_OF_INVISIBILITY), CLOAK_OF_INVISIBILITY),
CLOAK("cloak of magic resistance", "ornamental cope", CLOAK("cloak of magic resistance", "ornamental cope",
0, 1, ANTIMAGIC, 2, 0, 10, 60, 9, 1, CLOTH, CLR_WHITE, 0, 1, ANTIMAGIC, 6, 0, 10, 60, 9, 1, CLOTH, CLR_WHITE,
CLOAK_OF_MAGIC_RESISTANCE), CLOAK_OF_MAGIC_RESISTANCE),
/* 'cope' is not a spelling mistake... leave it be */ /* 'cope' is not a spelling mistake... leave it be */
CLOAK("cloak of displacement", "piece of cloth", CLOAK("cloak of displacement", "piece of cloth",
0, 1, DISPLACED, 10, 0, 10, 50, 9, 1, CLOTH, HI_CLOTH, 0, 1, DISPLACED, 12, 0, 10, 50, 9, 1, CLOTH, HI_CLOTH,
CLOAK_OF_DISPLACEMENT), CLOAK_OF_DISPLACEMENT),
/* shields */ /* shields */
SHIELD("small shield", "wooden shield", SHIELD("small shield", "wooden shield",
0, 0, 0, 0, 4, 0, 30, 3, 9, 0, WOOD, HI_WOOD, 0, 0, 0, 0, 6, 0, 30, 3, 9, 0, WOOD, HI_WOOD,
SMALL_SHIELD), SMALL_SHIELD),
SHIELD("shield of drain resistance", "wooden shield", SHIELD("shield of drain resistance", "wooden shield",
0, 1, 0, DRAIN_RES, 3, 0, 30, 50, 9, 0, WOOD, HI_WOOD, 0, 1, 0, DRAIN_RES, 12, 0, 30, 50, 9, 0, WOOD, HI_WOOD,
SHIELD_OF_DRAIN_RESISTANCE), SHIELD_OF_DRAIN_RESISTANCE),
SHIELD("shield of shock resistance", "wooden shield", SHIELD("shield of shock resistance", "wooden shield",
0, 1, 0, SHOCK_RES, 3, 0, 30, 50, 9, 0, WOOD, HI_WOOD, 0, 1, 0, SHOCK_RES, 12, 0, 30, 50, 9, 0, WOOD, HI_WOOD,
SHIELD_OF_SHOCK_RESISTANCE), SHIELD_OF_SHOCK_RESISTANCE),
SHIELD("elven shield", "blue and green shield", SHIELD("elven shield", "blue and green shield",
0, 0, 0, 0, 2, 0, 40, 7, 8, 0, WOOD, CLR_GREEN, 0, 0, 0, 0, 2, 0, 40, 7, 8, 0, WOOD, CLR_GREEN,
ELVEN_SHIELD), ELVEN_SHIELD),
SHIELD("Uruk-hai shield", "white-handed shield", SHIELD("Uruk-hai shield", "white-handed shield",
0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, HI_METAL, 0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, HI_METAL,
URUK_HAI_SHIELD), URUK_HAI_SHIELD),
SHIELD("orcish shield", "red-eyed shield", SHIELD("orcish shield", "red-eyed shield",
0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, CLR_RED, 0, 0, 0, 0, 2, 0, 50, 7, 9, 0, IRON, CLR_RED,
ORCISH_SHIELD), ORCISH_SHIELD),
SHIELD("large shield", NoDes, SHIELD("large shield", NoDes,
1, 0, 1, 0, 4, 0, 100, 10, 8, 0, IRON, HI_METAL, 1, 0, 1, 0, 4, 0, 100, 10, 8, 0, IRON, HI_METAL,
LARGE_SHIELD), LARGE_SHIELD),
SHIELD("dwarvish roundshield", "large round shield", SHIELD("dwarvish roundshield", "large round shield",
0, 0, 0, 0, 3, 0, 100, 10, 8, 0, IRON, HI_METAL, 0, 0, 0, 0, 3, 0, 100, 10, 8, 0, IRON, HI_METAL,
DWARVISH_ROUNDSHIELD), DWARVISH_ROUNDSHIELD),
SHIELD("shield of reflection", "polished silver shield", SHIELD("shield of reflection", "polished silver shield",
0, 1, 0, REFLECTING, 3, 0, 50, 50, 8, 0, SILVER, HI_SILVER, 0, 1, 0, REFLECTING, 7, 0, 50, 50, 8, 0, SILVER, HI_SILVER,
SHIELD_OF_REFLECTION), SHIELD_OF_REFLECTION),
/* gloves */ /* gloves */
@@ -684,7 +684,7 @@ SHIELD("shield of reflection", "polished silver shield",
* HI_METAL or CLR_BLACK. All have shuffled descriptions. * HI_METAL or CLR_BLACK. All have shuffled descriptions.
*/ */
GLOVES("leather gloves", "old gloves", GLOVES("leather gloves", "old gloves",
0, 0, 0, 16, 1, 10, 8, 9, 0, LEATHER, HI_LEATHER, 0, 0, 0, 15, 1, 10, 8, 9, 0, LEATHER, HI_LEATHER,
LEATHER_GLOVES), LEATHER_GLOVES),
GLOVES("gauntlets of fumbling", "padded gloves", GLOVES("gauntlets of fumbling", "padded gloves",
0, 1, FUMBLING, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER, 0, 1, FUMBLING, 8, 1, 10, 50, 9, 0, LEATHER, HI_LEATHER,
@@ -698,11 +698,11 @@ GLOVES("gauntlets of dexterity", "fencing gloves",
/* boots */ /* boots */
BOOTS("low boots", "walking shoes", BOOTS("low boots", "walking shoes",
0, 0, 0, 25, 2, 10, 8, 9, 0, LEATHER, HI_LEATHER, LOW_BOOTS), 0, 0, 0, 23, 2, 10, 8, 9, 0, LEATHER, HI_LEATHER, LOW_BOOTS),
BOOTS("iron shoes", "hard shoes", BOOTS("iron shoes", "hard shoes",
0, 0, 0, 7, 2, 50, 16, 8, 0, IRON, HI_METAL, IRON_SHOES), 0, 0, 0, 7, 2, 50, 16, 8, 0, IRON, HI_METAL, IRON_SHOES),
BOOTS("high boots", "jackboots", BOOTS("high boots", "jackboots",
0, 0, 0, 15, 2, 20, 12, 8, 0, LEATHER, HI_LEATHER, HIGH_BOOTS), 0, 0, 0, 14, 2, 20, 12, 8, 0, LEATHER, HI_LEATHER, HIGH_BOOTS),
/* with shuffled appearances... */ /* with shuffled appearances... */
BOOTS("speed boots", "combat boots", BOOTS("speed boots", "combat boots",
0, 1, FAST, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER, SPEED_BOOTS), 0, 1, FAST, 12, 2, 20, 50, 9, 0, LEATHER, HI_LEATHER, SPEED_BOOTS),

View File

@@ -34,10 +34,10 @@ struct icp {
}; };
static const struct icp mkobjprobs[] = { { 10, WEAPON_CLASS }, static const struct icp mkobjprobs[] = { { 10, WEAPON_CLASS },
{ 10, ARMOR_CLASS }, { 11, ARMOR_CLASS },
{ 20, FOOD_CLASS }, { 20, FOOD_CLASS },
{ 8, TOOL_CLASS }, { 8, TOOL_CLASS },
{ 8, GEM_CLASS }, { 7, GEM_CLASS },
{ 16, POTION_CLASS }, { 16, POTION_CLASS },
{ 16, SCROLL_CLASS }, { 16, SCROLL_CLASS },
{ 4, SPBOOK_CLASS }, { 4, SPBOOK_CLASS },