From: PatR Date: Mon, 13 Apr 2020 21:58:12 +0000 (-0700) Subject: rest/search refinement X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=caac70c5ecc700905513228f6e59a8b05fa0a1f1;p=nethack rest/search refinement When rest and search refuse to operate because a hostile monster is adjacent, include a reminder of how to force them to operate. Every time if 'cmdassist' is On, or just once until after some subsequent try actually does something. This new rest and search behavior probably needs to be optional and default to the old behavior. It isn't uncommon to deliberately rest while adjacent to a hostile monster if also adjacent to a peaceful one and trying to wait for Stun or Confusion to time out, or maybe search while next to such a monster hoping to find a secret door to run away through. A count prefix won't work and needing an extra keystroke each time is going to be an annoyance. --- diff --git a/include/decl.h b/include/decl.h index 615d26e4e..f9d57e774 100644 --- a/include/decl.h +++ b/include/decl.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 decl.h $NHDT-Date: 1583608809 2020/03/07 19:20:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.228 $ */ +/* NetHack 3.6 decl.h $NHDT-Date: 1586815081 2020/04/13 21:58:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.230 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2007. */ /* NetHack may be freely redistributed. See license for details. */ @@ -814,6 +814,10 @@ struct instance_globals { #endif struct sinfo program_state; + /* detect.c */ + + int already_found_flag; /* used to augment first "already found a monster" + * message if 'cmdassist' is Off */ /* dig.c */ boolean did_dig_msg; @@ -828,7 +832,8 @@ struct instance_globals { boolean at_ladder; char *dfr_pre_msg; /* pline() before level change */ char *dfr_post_msg; /* pline() after level change */ - d_level save_dlevel; + int did_nothing_flag; /* to augment the no-rest-next-to-monster message */ + d_level save_dlevel; /* ? [even back in 3.4.3, only used in bones.c] */ /* do_name.c */ struct selectionvar *gloc_filter_map; diff --git a/src/decl.c b/src/decl.c index 112ba9549..28b501d34 100644 --- a/src/decl.c +++ b/src/decl.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 decl.c $NHDT-Date: 1583608833 2020/03/07 19:20:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.208 $ */ +/* NetHack 3.6 decl.c $NHDT-Date: 1586815084 2020/04/13 21:58:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.209 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2009. */ /* NetHack may be freely redistributed. See license for details. */ @@ -357,6 +357,9 @@ const struct instance_globals g_init = { #endif UNDEFINED_VALUES, /* program_state */ + /* detect.c */ + 0, /* already_found_flag */ + /* dig.c */ UNDEFINED_VALUE, /* did_dig_msg */ @@ -369,6 +372,7 @@ const struct instance_globals g_init = { FALSE, /* at_ladder */ NULL, /* dfr_pre_msg */ NULL, /* dfr_post_msg */ + 0, /* did_nothing_flag */ { 0, 0 }, /* save_dlevel */ /* do_name.c */ diff --git a/src/detect.c b/src/detect.c index bc5c6e9e0..3c5d87f43 100644 --- a/src/detect.c +++ b/src/detect.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 detect.c $NHDT-Date: 1578252630 2020/01/05 19:30:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.114 $ */ +/* NetHack 3.6 detect.c $NHDT-Date: 1586815085 2020/04/13 21:58:05 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.118 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1783,9 +1783,16 @@ int dosearch() { if (!iflags.menu_requested && !g.multi && monster_nearby()) { - Norep("You already found a monster."); + char buf[QBUFSZ]; + + buf[0] = '\0'; + if (iflags.cmdassist || !g.already_found_flag++) + Sprintf(buf, " Use '%s' prefix to force another search.", + visctrl(g.Cmd.spkeys[NHKF_REQMENU])); /* default is "m" */ + Norep("You already found a monster.%s", buf); return 0; } + g.already_found_flag = 0; /* start over */ return dosearch0(0); } diff --git a/src/do.c b/src/do.c index d8075f790..15b43397e 100644 --- a/src/do.c +++ b/src/do.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 do.c $NHDT-Date: 1586285681 2020/04/07 18:54:41 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.235 $ */ +/* NetHack 3.6 do.c $NHDT-Date: 1586815086 2020/04/13 21:58:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.237 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1967,14 +1967,22 @@ long timeout UNUSED; } } +/* '.' command: do nothing == rest; also the + ' ' command iff 'rest_on_space' option is On */ int donull() { if (!iflags.menu_requested && !g.multi && monster_nearby()) { - Norep("Are you waiting to get hit?"); + char buf[QBUFSZ]; + + buf[0] = '\0'; + if (iflags.cmdassist || !g.did_nothing_flag++) + Sprintf(buf, " Use '%s' prefix to force a no-op (to rest).", + visctrl(g.Cmd.spkeys[NHKF_REQMENU])); /* default is "m" */ + Norep("Are you waiting to get hit?%s", buf); return 0; } - + g.did_nothing_flag = 0; /* reset */ return 1; /* Do nothing, but let other things happen */ }