Skip to content

Commit fa18830

Browse files
committed
Penalty for a chaotic Drow killing Lolth.
Now that Lolth will spawn peaceful for Drow that remain true to their base alignment (chaotic), there's now a severe penalty for any chaotic Drow that kill her - permanent alignment change to lawful, and a massive ding to luck and alignment score, as well as making their new deity pissed off (they don't like seeing one of their own being killed, even if they are of an opposing alignment).
1 parent ee0f91e commit fa18830

File tree

4 files changed

+66
-39
lines changed

4 files changed

+66
-39
lines changed

doc/evilhack-changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -3402,4 +3402,5 @@ The following changes to date are:
34023402
riders
34033403
- Lolth will be peaceful towards Drow players under the right
34043404
circumstances
3405+
- Penalty for a chaotic Drow killing Lolth
34053406

src/makemon.c

+3
Original file line numberDiff line numberDiff line change
@@ -4059,6 +4059,9 @@ struct monst *mtmp;
40594059
; /* Moloch's indifference */
40604060
else
40614061
mtmp->malign = -20;
4062+
} else if (mdat == &mons[PM_LOLTH]
4063+
&& u.ualign.type == A_CHAOTIC && Race_if(PM_DROW)) {
4064+
mtmp->malign = -30; /*super bad, just killed your deity */
40624065
} else if (mal == A_NONE) {
40634066
if (mtmp->mpeaceful)
40644067
mtmp->malign = 0;

src/mon.c

+18
Original file line numberDiff line numberDiff line change
@@ -4246,6 +4246,24 @@ int xkill_flags; /* 1: suppress message, 2: suppress corpse, 4: pacifist */
42464246
change_luck(-20);
42474247
pline("That was %sa bad idea...",
42484248
u.uevent.qcompleted ? "probably " : "");
4249+
} else if (mdat == &mons[PM_LOLTH]
4250+
&& u.ualign.type == A_CHAOTIC
4251+
&& Race_if(PM_DROW)) { /* Super bad, just killed your deity */
4252+
if (canspotmon(mtmp))
4253+
You_feel("very guilty.");
4254+
else
4255+
You("have a vague sense of intense guilt.");
4256+
uchangealign(A_LAWFUL, 0); /* permanent alignment change */
4257+
/* even though alignment has changed and the player
4258+
is now bound to a different deity, they don't take
4259+
kindly to one of their own being killed */
4260+
adjalign(-(u.ualign.record + (int) ALIGNLIM / 2));
4261+
u.ugangr += 7; /* instantly become "extremely" angry */
4262+
change_luck(-20);
4263+
if (!Hallucination)
4264+
pline("That was an extremely bad idea...");
4265+
else
4266+
pline("Umm... err...");
42494267
} else if (mndx == urole.neminum) { /* Real good! */
42504268
if (!quest_status.killed_leader)
42514269
adjalign((int) (ALIGNLIM / 4));

src/timeout.c

+44-39
Original file line numberDiff line numberDiff line change
@@ -561,48 +561,53 @@ nh_timeout()
561561
baseluck -= 4;
562562

563563
if (u.uluck != baseluck) {
564-
int timeout = 600;
565-
int time_luck = stone_luck(FALSE);
566-
/* Cursed luckstones slow bad luck timing out; blessed luckstones
567-
* slow good luck timing out; normal luckstones slow both;
568-
* neither is affected if you don't have a luckstone.
564+
int timeout = 600;
565+
int time_luck = stone_luck(FALSE);
566+
567+
/* Cursed luckstones slow bad luck timing out; blessed luckstones
568+
* slow good luck timing out; normal luckstones slow both;
569+
* neither is affected if you don't have a luckstone.
569570
* Luck is based at 0 usually, +1 if a full moon and -1 on Friday 13th
570571
*/
571-
if (has_luckitem() && (!time_luck
572-
|| (time_luck > 0 && u.uluck > baseluck)
573-
|| (time_luck < 0 && u.uluck < baseluck))) {
574-
575-
/* The slowed timeout depends on the distance between your
576-
* luck (not including luck bonuses) and your base luck.
577-
*
578-
* distance timeout
579-
* --------------------
580-
* 1 24800
581-
* 2 24200
582-
* 3 23200
583-
* 4 21800
584-
* 5 20000
585-
* 6 17800
586-
* 7 15200
587-
* 8 12200
588-
* 9 8800
589-
* 10 5000
590-
* 11 800
591-
*/
592-
int base_dist = u.uluck - baseluck;
593-
int slow_timeout = 25000 - 200 * (base_dist * base_dist);
594-
if (slow_timeout > timeout) timeout = slow_timeout;
595-
}
596-
597-
if (u.uhave.amulet || u.ugangr) timeout = timeout / 2;
598-
599-
if (moves >= u.luckturn + timeout) {
600-
if (u.uluck > baseluck)
601-
u.uluck--;
602-
else if (u.uluck < baseluck)
603-
u.uluck++;
572+
if (has_luckitem()
573+
&& (!time_luck
574+
|| (time_luck > 0 && u.uluck > baseluck)
575+
|| (time_luck < 0 && u.uluck < baseluck))) {
576+
577+
/* The slowed timeout depends on the distance between your
578+
* luck (not including luck bonuses) and your base luck.
579+
*
580+
* distance timeout
581+
* --------------------
582+
* 1 24800
583+
* 2 24200
584+
* 3 23200
585+
* 4 21800
586+
* 5 20000
587+
* 6 17800
588+
* 7 15200
589+
* 8 12200
590+
* 9 8800
591+
* 10 5000
592+
* 11 800
593+
*/
594+
int base_dist = u.uluck - baseluck;
595+
int slow_timeout = 25000 - 200 * (base_dist * base_dist);
596+
597+
if (slow_timeout > timeout)
598+
timeout = slow_timeout;
599+
}
600+
601+
if (u.uhave.amulet || u.ugangr)
602+
timeout = timeout / 2;
603+
604+
if (moves >= u.luckturn + timeout) {
605+
if (u.uluck > baseluck)
606+
u.uluck--;
607+
else if (u.uluck < baseluck)
608+
u.uluck++;
604609
u.luckturn = moves;
605-
}
610+
}
606611
}
607612
if (HPasses_walls)
608613
phasing_dialogue();

0 commit comments

Comments
 (0)