From c4a1f298e8923dfc0543f51d4794bc0286d42138 Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 11 Oct 2024 23:34:26 -0700 Subject: [PATCH] lawful minions vs Demonbane Back then Demonbane was a long sword, lawful Angels and Archons could get either it or Sunsword as part of their starting equipment. After it got changed into a mace instead, they could only get Sunsword. Rather than always giving them a long sword, sometimes give them a mace so that they get back the chance to start with Demonbane. Since mace is quite a bit weaker that long sword against large opponents, provide a better enchantment for maces given to lawful minions. --- src/makemon.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/makemon.c b/src/makemon.c index a712b6a31..828328ab2 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -329,20 +329,27 @@ m_initweap(struct monst *mtmp) case S_ANGEL: if (humanoid(ptr)) { - /* create minion stuff; can't use mongets */ - otmp = mksobj(LONG_SWORD, FALSE, FALSE); - - /* maybe make it special */ + /* create minion stuff; can't use mongets; + weapon: long sword [rn2(5) > 1 == 60%] or mace [40%] */ + otmp = mksobj((rn2(5) > 1) ? LONG_SWORD : MACE, FALSE, FALSE); + /* maybe promote weapon to an artifact */ if ((!rn2(20) || is_lord(ptr)) && sgn(mtmp->isminion ? EMIN(mtmp)->min_align - : ptr->maligntyp) == A_LAWFUL) - /* [note: this used to have a 50:50 chance for Sunsword or - Demonbane, but Demonbane has been changed into a mace] */ - otmp = oname(otmp, artiname(ART_SUNSWORD), + : ptr->maligntyp) == A_LAWFUL) { + /* Sunsword and Demonbane both used to be long swords and + Angels always got a long sword, so might get either of + the two artifacts; Demonbane has been changed to be a + mace; this deliberately makes an independent choice of + which artifact and if it picks the wrong name for 'otmp's + type, then 'otmp' won't be upgraded into an artifact */ + otmp = oname(otmp, artiname((rn2(5) > 1) ? ART_SUNSWORD + : ART_DEMONBANE), ONAME_RANDOM); /* randomly created */ + } bless(otmp); otmp->oerodeproof = TRUE; - otmp->spe = rn2(4); + /* make long sword be +0 to +3, weaker mace be +3 to +6 */ + otmp->spe = (otmp->otyp == LONG_SWORD) ? rn2(4) : rn1(4, 3); (void) mpickobj(mtmp, otmp); otmp = mksobj(!rn2(4) || is_lord(ptr) ? SHIELD_OF_REFLECTION