]> granicus.if.org Git - nethack/commitdiff
fix github issue #447 - casting area-effect spell
authorPatR <rankin@nethack.org>
Sun, 24 Jan 2021 21:00:44 +0000 (13:00 -0800)
committerPatR <rankin@nethack.org>
Sun, 24 Jan 2021 21:00:44 +0000 (13:00 -0800)
at self when blind.  Spell targetting would let player pick
hero's own spot but casting would reject it when blind because
hero didn't sense any monster there.  The player wanted to cast
skilled fireball at self to cure being turned into slime but
wasn't allowed.  (Targetting an adjacent spot would work for
fireball, but is only feasible when telepathy reveals a monster
there.)

While testing the one-line fix, I noticed that the message line
(tty) showed stale data (autodescribe info for target spot) as
the fireball I cast (when not blind) bounced around the vicinity.
Normally that's cleared when a message is issued or the when the
next command is requested, but skilled fireball causes multiple
explosion animations before either of those situations.

doc/fixes37.0
src/spell.c

index 3eedd63c375a240c8f2346274bd69176a69e4bd7..810ad99fb5253107a338e6a33f634a9b2ef6dfe1 100644 (file)
@@ -1,4 +1,4 @@
-NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.431 $ $NHDT-Date: 1611182248 2021/01/20 22:37:28 $
+NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.434 $ $NHDT-Date: 1611522041 2021/01/24 21:00:41 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -370,6 +370,11 @@ for configuration using external compression on save files that applied a name
        been manually uncompressed, mangling file name trying to remove suffix
 an empty lamp hit by fire reported "the oil lamp catches fire" (but at least
        didn't light)
+spells that require a target spot rather than a direction (like skilled
+       fireball) would not let a blinded hero target his/her own spot, with
+       feedback stating hero failed to hold location sufficiently in mind;
+       when not blind, such spells left autodescribe feedback for target spot
+       in the message window while the spell was being performed
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index 776f05ec834f0e168a238276689915ae6b9fc4e7..ca5311d463d2faf01664280f213b283970f5fc91 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.7 spell.c $NHDT-Date: 1607980325 2020/12/14 21:12:05 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.110 $ */
+/* NetHack 3.7 spell.c $NHDT-Date: 1611522041 2021/01/24 21:00:41 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.113 $ */
 /*      Copyright (c) M. Stephenson 1988                          */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -1266,6 +1266,8 @@ throwspell()
     cc.y = u.uy;
     if (getpos(&cc, TRUE, "the desired position") < 0)
         return 0; /* user pressed ESC */
+    clear_nhwindow(WIN_MESSAGE); /* discard any autodescribe feedback */
+
     /* The number of moves from hero to where the spell drops.*/
     if (distmin(u.ux, u.uy, cc.x, cc.y) > 10) {
         pline_The("spell dissipates over the distance!");
@@ -1276,7 +1278,7 @@ throwspell()
         u.dx = 0;
         u.dy = 0;
         return 1;
-    } else if ((!cansee(cc.x, cc.y)
+    } else if (((cc.x != u.ux || cc.y != u.uy) && !cansee(cc.x, cc.y)
                 && (!(mtmp = m_at(cc.x, cc.y)) || !canspotmon(mtmp)))
                || IS_STWALL(levl[cc.x][cc.y].typ)) {
         Your("mind fails to lock onto that location!");