From: PatR Date: Wed, 9 Dec 2015 07:12:28 +0000 (-0800) Subject: fix #H3994 - cursed genocide is inconsistent X-Git-Tag: NetHack-3.7.0_WIP~791^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a35c3e184c5d86aebb0fb2b3e40a0e6b28fb4a90;p=nethack fix #H3994 - cursed genocide is inconsistent After reading a cursed scroll of genocide, explicitly choosing "none" when asked to pick what type of monster to wipe out, you get "sent in some ". But picking nothing (or something invalid) 5 times gave "that's enough tries" without sending in random monsters. Make the time-to-give-up behavior be the same as the don't-want-to behavior. Also, treat picking ESC the same as "none", like blessed genocide does. --- diff --git a/src/read.c b/src/read.c index 6f9b39a0b..570ca74f8 100644 --- a/src/read.c +++ b/src/read.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 read.c $NHDT-Date: 1448862378 2015/11/30 05:46:18 $ $NHDT-Branch: master $:$NHDT-Revision: 1.125 $ */ +/* NetHack 3.6 read.c $NHDT-Date: 1449645144 2015/12/09 07:12:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.126 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2111,6 +2111,10 @@ int how; } else { for (i = 0;; i++) { if (i >= 5) { + /* cursed effect => no free pass (unless rndmonst() fails) */ + if (!(how & REALLY) && (ptr = rndmonst()) != 0) + break; + pline1(thats_enough_tries); return; } @@ -2118,16 +2122,13 @@ int how; buf); (void) mungspaces(buf); /* choosing "none" preserves genocideless conduct */ - if (!strcmpi(buf, "none") || !strcmpi(buf, "nothing")) { + if (*buf == '\033' || !strcmpi(buf, "none") + || !strcmpi(buf, "nothing")) { /* ... but no free pass if cursed */ - if (!(how & REALLY)) { - ptr = rndmonst(); - if (!ptr) - return; /* no message, like normal case */ - mndx = monsndx(ptr); + if (!(how & REALLY) && (ptr = rndmonst()) != 0) break; /* remaining checks don't apply */ - } else - return; + + return; } mndx = name_to_mon(buf); @@ -2151,11 +2152,12 @@ int how; if (!(ptr->geno & G_GENO)) { if (!Deaf) { - /* fixme: unconditional "caverns" will be silly in some - * circumstances */ + /* FIXME: unconditional "caverns" will be silly in some + * circumstances. Who's speaking? Divine pronouncements + * aren't supposed to be hampered by deafness.... + */ if (flags.verbose) - pline( - "A thunderous voice booms through the caverns:"); + pline("A thunderous voice booms through the caverns:"); verbalize("No, mortal! That will not be done."); } continue; @@ -2165,6 +2167,7 @@ int how; killplayer++; break; } + mndx = monsndx(ptr); /* needed for the 'no free pass' cases */ } which = "all ";