From bb68c4b4e77030e39d77009e6db869bd1a9c4816 Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 18 Mar 2016 15:50:13 -0700 Subject: [PATCH] tuning: succubi This one had been intended for longer than several years, but I hadn't gotten around to it. When consorting with succubi and incubi, very high Cha+Int no longer guarantees that a positive outcome will occur. Chance of positive outcome is still quite high and most of the negative outcomes are pretty easy to repair, so this isn't likely to make a significant impact. However, the possibility of losing spell power will matter for some players.... --- src/mhitu.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/mhitu.c b/src/mhitu.c index 9f3d70b14..99aea801b 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -2302,7 +2302,7 @@ register struct monst *mon; { register struct obj *ring, *nring; boolean fem = (mon->data == &mons[PM_SUCCUBUS]); /* otherwise incubus */ - int tried_gloves = 0; + int attr_tot, tried_gloves = 0; char qbuf[QBUFSZ]; if (mon->mcan || mon->mspec_used) { @@ -2443,7 +2443,12 @@ register struct monst *mon; /* by this point you have discovered mon's identity, blind or not... */ pline("Time stands still while you and %s lie in each other's arms...", noit_mon_nam(mon)); - if (rn2(35) > ACURR(A_CHA) + ACURR(A_INT)) { + /* 3.6.1: a combined total for charisma plus intelligence of 35-1 + used to guarantee successful outcome; now total maxes out at 32 + as far as deciding what will happen; chance for bad outcome when + Cha+Int is 32 or more is 2/35, a bit over 5.7% */ + attr_tot = ACURR(A_CHA) + ACURR(A_INT); + if (rn2(35) > min(attr_tot, 32)) { /* Don't bother with mspec_used here... it didn't get tired! */ pline("%s seems to have enjoyed it more than you...", noit_Monnam(mon)); @@ -2475,16 +2480,20 @@ register struct monst *mon; } else { You("have a curious feeling..."); } + exercise(A_CON, FALSE); + exercise(A_DEX, FALSE); + exercise(A_WIS, FALSE); break; case 4: { int tmp; + You_feel("exhausted."); exercise(A_STR, FALSE); tmp = rn1(10, 6); losehp(Maybe_Half_Phys(tmp), "exhaustion", KILLED_BY); break; - } - } + } /* case 4 */ + } /* switch */ } else { mon->mspec_used = rnd(100); /* monster is worn out */ You("seem to have enjoyed it more than %s...", noit_mon_nam(mon)); @@ -2522,14 +2531,14 @@ register struct monst *mon; } } - if (mon->mtame) /* don't charge */ + if (mon->mtame) { /* don't charge */ ; - else if (rn2(20) < ACURR(A_CHA)) { + } else if (rn2(20) < ACURR(A_CHA)) { pline("%s demands that you pay %s, but you refuse...", noit_Monnam(mon), Blind ? (fem ? "her" : "him") : mhim(mon)); - } else if (u.umonnum == PM_LEPRECHAUN) + } else if (u.umonnum == PM_LEPRECHAUN) { pline("%s tries to take your money, but fails...", noit_Monnam(mon)); - else { + } else { long cost; long umoney = money_cnt(invent); @@ -2544,9 +2553,9 @@ register struct monst *mon; } if (cost > umoney) cost = umoney; - if (!cost) + if (!cost) { verbalize("It's on the house!"); - else { + } else { pline("%s takes %ld %s for services rendered!", noit_Monnam(mon), cost, currency(cost)); money2mon(mon, cost); -- 2.40.0