From 9b42e32c3b208aa4220f54642953d4d7dc58e469 Mon Sep 17 00:00:00 2001 From: Fredrik Ljungdahl Date: Wed, 27 Nov 2019 16:44:17 +0100 Subject: [PATCH 1/5] Fix alternate number pad interpretation only working for diagonals This fixes the issue brought up at https://www.reddit.com/r/nethack/comments/dv3pae/curses_and_the_numberpad/?st=k3hgply6&sh=dbc2bf7d . I don't know why the "regular" (tty) method doesn't seem to work for him, but I'm going to chalk it up to a PDCurses oddity. What I do know, however, is that the alternate method I added a year ago or maybe longer, that allows numpad usage even with number_pad:0 (to retain the default keybindings in case an user is used to them, while keeping number pad behaviour making sense, similar to NetHack4+friends) was only partially implemented, for some reason. This adds the rest of the keys, meaning that this means of key interpretation should be more realible. KEY_A2/B1/B3/C2 are not standard keys in the Curses documentation, and is thus behind an ifdef -- but PDCurses, amongst other implementations, makes use of them. As a side effect, Home/End/PgUp/PgDn are now interpreted as diagonal movement, since some terminals interpret number_pad keys that way. I do not consider this a problem since they went unused in normal gameplay anyway (This does not interfere with menus or similar). --- win/curses/cursmisc.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/win/curses/cursmisc.c b/win/curses/cursmisc.c index a158b221c..d0655efa1 100644 --- a/win/curses/cursmisc.c +++ b/win/curses/cursmisc.c @@ -873,6 +873,9 @@ curses_convert_keys(int key) readchar() and stripping the value down to 0..255 yields ^G! */ ret = C('H'); break; +#ifdef KEY_B1 + case KEY_B1: +#endif case KEY_LEFT: if (iflags.num_pad) { ret = '4'; @@ -880,6 +883,9 @@ curses_convert_keys(int key) ret = 'h'; } break; +#ifdef KEY_B3 + case KEY_B3: +#endif case KEY_RIGHT: if (iflags.num_pad) { ret = '6'; @@ -887,6 +893,9 @@ curses_convert_keys(int key) ret = 'l'; } break; +#ifdef KEY_A2 + case KEY_A2: +#endif case KEY_UP: if (iflags.num_pad) { ret = '8'; @@ -894,6 +903,9 @@ curses_convert_keys(int key) ret = 'k'; } break; +#ifdef KEY_C2 + case KEY_C2: +#endif case KEY_DOWN: if (iflags.num_pad) { ret = '2'; @@ -903,40 +915,44 @@ curses_convert_keys(int key) break; #ifdef KEY_A1 case KEY_A1: +#endif + case KEY_HOME: if (iflags.num_pad) { ret = '7'; } else { ret = 'y'; } break; -#endif /* KEY_A1 */ #ifdef KEY_A3 case KEY_A3: +#endif + case KEY_PPAGE: if (iflags.num_pad) { ret = '9'; } else { ret = 'u'; } break; -#endif /* KEY_A3 */ #ifdef KEY_C1 case KEY_C1: +#endif + case KEY_END: if (iflags.num_pad) { ret = '1'; } else { ret = 'b'; } break; -#endif /* KEY_C1 */ #ifdef KEY_C3 case KEY_C3: +#endif + case KEY_NPAGE: if (iflags.num_pad) { ret = '3'; } else { ret = 'n'; } break; -#endif /* KEY_C3 */ #ifdef KEY_B2 case KEY_B2: if (iflags.num_pad) { From 0c98a30b8d81fb46e799fe30d46bd876168ad4f6 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 27 Nov 2019 11:24:23 -0800 Subject: [PATCH 2/5] fix part of #H9467 - clairvoyance vs sensed mons When a monster is drawn on the map, remove any "remembered, unseen monster" glyph being shown at the same spot. Clairvoyance shows all monsters in vicinty, then ones which can't be seen are replaced with the 'I' glyph (which is on the object layer or the display, not the monster layer show is subject to different update behavior). But subsequent monster refresh didn't get rid of it when a sensed monster was displayed over it. (3.6.1 included a similar fix for warned-of monsters.) Also during clairvoyance, don't draw an 'I' at a spot that will immediately be refreshed with a monster because 'I' clobbers any remembered object at the same location. --- doc/fixes36.3 | 10 +++++++++- src/detect.c | 11 ++++++++--- src/display.c | 33 +++++++++++++++++++++++---------- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 238f156ca..4dd283b4d 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.191 $ $NHDT-Date: 1574722861 2019/11/25 23:01:01 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.192 $ $NHDT-Date: 1574882658 2019/11/27 19:24:18 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -306,6 +306,14 @@ look-at of mimics mimicking altars got an arbitary alignment from misuse of underlying terrain polymorph_sink creating an altar passed a call to rn2() as an argument to a macro which evaluates its parameter more than once +if a monster (presumably sensed but not seen) was displayed at a location + showing "remembered, unseen monster", remove that since hero now knows + something else is there (3.6.1 had similar fix for warned-of monsters) +clairvoyance showed all monsters in range, then after player viewed the map, + replaced them with "remembered, unseen monster" glyph and finally + did a normal monster refresh; the 'I' glyph step clobbers remembered + object at same spot, so skip it for locations where monster refresh + is going to immediately redisplay a monster unix: fix double DLB definition in linux hints file windows: fix --showpaths output for the data file which relies on being constructed programmatically to incorporate the version suffix diff --git a/src/detect.c b/src/detect.c index 8ddf0a061..574a85b7b 100644 --- a/src/detect.c +++ b/src/detect.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 detect.c $NHDT-Date: 1562630266 2019/07/08 23:57:46 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.96 $ */ +/* NetHack 3.6 detect.c $NHDT-Date: 1574882659 2019/11/27 19:24:19 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.99 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1416,8 +1416,13 @@ struct obj *sobj; /* scroll--actually fake spellbook--object */ continue; newglyph = glyph_at(zx, zy); if (glyph_is_monster(newglyph) - && glyph_to_mon(newglyph) != PM_LONG_WORM_TAIL) - map_invisible(zx, zy); + && glyph_to_mon(newglyph) != PM_LONG_WORM_TAIL) { + /* map_invisible() was unconditional here but that made + remembered objects be forgotten for the case where a + monster is immediately redrawn by see_monsters() */ + if ((mtmp = m_at(zx, zy)) == 0 || !canspotmon(mtmp)) + map_invisible(zx, zy); + } } see_monsters(); diff --git a/src/display.c b/src/display.c index e09e9ff45..722c25818 100644 --- a/src/display.c +++ b/src/display.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 display.c $NHDT-Date: 1573934698 2019/11/16 20:04:58 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.107 $ */ +/* NetHack 3.6 display.c $NHDT-Date: 1574882660 2019/11/27 19:24:20 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.108 $ */ /* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */ /* and Dave Cohrs, 1990. */ /* NetHack may be freely redistributed. See license for details. */ @@ -123,6 +123,7 @@ */ #include "hack.h" +STATIC_DCL void FDECL(show_mon_or_warn, (int, int, int)); STATIC_DCL void FDECL(display_monster, (XCHAR_P, XCHAR_P, struct monst *, int, XCHAR_P)); STATIC_DCL int FDECL(swallow_to_glyph, (int, int)); @@ -361,6 +362,25 @@ int x, y, show; _map_location(x, y, show); } +/* display something on monster layer; may need to fixup object layer */ +STATIC_OVL void +show_mon_or_warn(x, y, monglyph) +int x, y, monglyph; +{ + struct obj *o; + + /* "remembered, unseen monster" is tracked by object layer so if we're + putting something on monster layer at same spot, stop remembering + that; if an object is in view there, start remembering it instead */ + if (glyph_is_invisible(levl[x][y].glyph)) { + unmap_object(x, y); + if (cansee(x, y) && (o = vobj_at(x, y)) != 0) + map_object(o, FALSE); + } + + show_glyph(x, y, monglyph); +} + #define DETECTED 2 #define PHYSICALLY_SEEN 1 #define is_worm_tail(mon) ((mon) && ((x != (mon)->mx) || (y != (mon)->my))) @@ -477,7 +497,7 @@ xchar worm_tail; /* mon is actually a worm tail */ else num = mon_to_glyph(mon, rn2_on_display_rng); } - show_glyph(x, y, num); + show_mon_or_warn(x, y, num); } } @@ -507,14 +527,7 @@ register struct monst *mon; impossible("display_warning did not match warning type?"); return; } - /* warning glyph is drawn on the monster layer; unseen - monster glyph is drawn on the object/trap/floor layer; - if we see a 'warning' move onto 'remembered, unseen' we - need to explicitly remove that in order for it to not - reappear when the warned-of monster moves off that spot */ - if (glyph_is_invisible(levl[x][y].glyph)) - unmap_object(x, y); - show_glyph(x, y, glyph); + show_mon_or_warn(x, y, glyph); } int From a351f904761812f1db80c0fb549b6bbd219841cd Mon Sep 17 00:00:00 2001 From: nhmall Date: Wed, 27 Nov 2019 17:19:55 -0500 Subject: [PATCH 3/5] number pad changes from pull request #247 Below is the accompanying text from the pull request on GitHub https://github.com/NetHack/NetHack/pull/247: > This fixes the issue brought up in https://www.reddit.com/r/nethack/comments/dv3pae/curses_and_the_numberpad/?st=k3hgply6&sh=dbc2bf7d . > > I don't know why the "regular" (tty) method doesn't seem to work for him, > but I'm going to chalk it up to a PDCurses oddity. What I do know, however, > is that the alternate method I added a year ago or maybe longer, that allows > numpad usage even with number_pad:0 (to retain the default keybindings in case > an user is used to them, while keeping number pad behaviour making sense, > similar to NetHack4+friends) was only partially implemented, for some reason. > This adds the rest of the keys, meaning that this means of key interpretation > should be more realible. KEY_A2/B1/B3/C2 are not standard keys in the Curses > documentation, and is thus behind an ifdef -- but PDCurses, amongst other > implementations, makes use of them. > > As a side effect, Home/End/PgUp/PgDn are now interpreted as diagonal movement, > since some terminals interpret number_pad keys that way. I do not consider this > a problem since they went unused in normal gameplay anyway (This does not > interfere with menus or similar). Closes #247 --- doc/fixes36.3 | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 4dd283b4d..2573be3bc 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -479,6 +479,7 @@ add a couple of engraving suggestions in pull request #79 chasonr's faster method to write characters to msdos VGA in pull request #220 chasonr's msdos Makefile.gcc pdcurses build changes in pull request #243 autopickup exception priority change in pull request #226 +FIQ's curses (PDCurses) number pad changes in pull request #247 Code Cleanup and Reorganization From 919f0e82d87dd980b7483bf9810b1caa0f3c3243 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 27 Nov 2019 15:19:52 -0800 Subject: [PATCH 4/5] untested curses number pad fix This compiles ok but I don't have a number pad to test it with. --- win/curses/cursmisc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/curses/cursmisc.c b/win/curses/cursmisc.c index d0655efa1..0d813cfcf 100644 --- a/win/curses/cursmisc.c +++ b/win/curses/cursmisc.c @@ -920,7 +920,7 @@ curses_convert_keys(int key) if (iflags.num_pad) { ret = '7'; } else { - ret = 'y'; + ret = !Cmd.swap_yz ? 'y' : 'z'; } break; #ifdef KEY_A3 From 7ca572eb60c2bfc61eada2acbc5a9855b38c3d97 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 27 Nov 2019 16:27:13 -0800 Subject: [PATCH 5/5] paranoid_confirmation:eating Add 'eating' (synonym 'continue') to the list of things that can be set via paranoid_confirmation to require "yes" instead of "y" when the user is prompted about something, in this case "Continue eating?". dat/opthelp was missing a few of the paranoid_confirmation choices. --- dat/opthelp | 8 ++++++-- doc/Guidebook.mn | 14 ++++++++++++-- doc/Guidebook.tex | 16 +++++++++++++--- include/flag.h | 6 +++++- src/eat.c | 33 +++++++++++++++------------------ src/options.c | 9 ++++++--- 6 files changed, 57 insertions(+), 29 deletions(-) diff --git a/dat/opthelp b/dat/opthelp index ee9092ede..0bcc8547e 100644 --- a/dat/opthelp +++ b/dat/opthelp @@ -99,7 +99,7 @@ altmeta For unix and VMS, treat two character sequence "ESC c" as M-c (Meta+c, 8th bit set) when nethack [FALSE] obtains a command from player's keyboard. -Boolean option if USE_TILES was set at compile time (MSDOS protected mode only): +Boolean option if USE_TILES was set at compile time (MSDOS protected mode): preload_tiles control whether tiles get pre-loaded into RAM at [TRUE] the start of the game. Doing so enhances performance of the tile graphics, but uses more memory. @@ -157,9 +157,13 @@ paranoid_confirmation space separated list [paranoid_confirmation:pray] die -- yes vs y to confirm dying (for explore or debug mode) bones -- yes vs y to confirm saving bones data in debug mode attack -- yes vs y to confirm attacking a peaceful monster + wand-break -- yes vs y to confirm breaking a wand + eating -- yes vs y to confirm whether to continue eating + Were-change -- yes vs y to confirm changing form due to + lycanthropy when hero has polymorph control; pray -- y to confirm an attempt to pray; on by default Remove -- always pick from inventory for 'R' and 'T' even when - wearing just one applicable item to remove or take off + wearing just one applicable item to remove or take off pickup_burden when you pick up an item that exceeds this encumbrance [S] level (Unencumbered, Burdened, streSsed, straiNed, overTaxed, or overLoaded), you will be asked if you want to continue. diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index c039e3bba..5bf417b7a 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1,4 +1,4 @@ -.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.331 $ $NHDT-Date: 1573943499 2019/11/16 22:31:39 $ +.\" $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.333 $ $NHDT-Date: 1574900824 2019/11/28 00:27:04 $ .\" .\" This is an excerpt from the 'roff' man page from the 'groff' package. .\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines. @@ -24,7 +24,7 @@ .ds vr "NetHack 3.6 .ds f0 "\*(vr .ds f1 -.ds f2 "November 17, 2019 +.ds f2 "November 27, 2019 . .\" A note on some special characters: .\" \(lq = left double quote @@ -693,6 +693,14 @@ Normally checks for edible item(s) on the floor, then if none are found or none are chosen, checks for edible item(s) in inventory. Precede \(oqe\(cq with the \(oqm\(cq prefix to bypass attempting to eat anything off the floor. +.lp "" +If you attempt to eat while already satiated, you might choke to death. +If you risk it, you will be asked whether +to \(lqcontinue eating?\(rq \fIif you survive the first bite\fP. +You can set the +.op paranoid_confirmation:eating +option to require a response of \f(CRyes\fP instead of just \f(CRy\fP. +. .\" Make sure Elbereth is not hyphenated below, the exact spelling matters .hw Elbereth .lp E @@ -3307,6 +3315,8 @@ bones data when dying in debug mode; require \(lqyes\(rq rather than \(oqy\(cq to confirm attacking a peaceful monster; .PL wand-break require \(lqyes\(rq rather than \(oqy\(cq to confirm breaking a wand; +.PL eating +require \(lqyes\(rq rather than \(oqy\(cq to confirm whether to continue eating; .PL Were-change require \(lqyes\(rq rather than \(oqy\(cq to confirm changing form due to lycanthropy when hero has polymorph control; diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 4c0edfabc..8a37b106f 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -45,7 +45,7 @@ %.au \author{Original version - Eric S. Raymond\\ (Edited and expanded for 3.6 by Mike Stephenson and others)} -\date{November 17, 2019} +\date{November 27, 2019} \maketitle @@ -796,7 +796,14 @@ Eat food.\\ Normally checks for edible item(s) on the floor, then if none are found or none are chosen, checks for edible item(s) in inventory. Precede `{\tt e}' with the `{\tt m}' prefix to bypass attempting to eat -anything off the floor. +anything off the floor.\\ +%.lp "" +If you attempt to eat while already satiated, you might choke to death. +If you risk it, you will be asked whether +to ``continue eating?'' {\it if you survive the first bite\/}. +You can set the +{\it paranoid\verb+_+confirmation:eating\/} +option to require a response of ``{\tt yes}'' instead of just `{\tt y}'. %.lp % Make sure Elbereth is not hyphenated below, the exact spelling matters. % (Only specified here to parallel Guidebook.mn; use of \tt font implicity @@ -1333,7 +1340,7 @@ Autocompletes. Debug mode only.\\ %.lp "" Asks for confirmation; default is `{\tt n}' (no); continue playing. -To really panic, respond with `{\tt y}''. +To really panic, respond with `{\tt y}'. You can set the {\it paranoid\verb+_+confirmation:quit\/} option to require a response of ``{\tt yes}'' instead. @@ -3640,6 +3647,9 @@ a peaceful monster; \item[{\tt wand-break}] require ``{\tt yes}'' rather than `{\tt y}' to confirm breaking a wand; +\item[{\tt eating}] +require ``{\tt yes}'' rather than `{\tt y}' to confirm whether to +continue eating; \item[{\tt Were-change}] require ``{\tt yes}'' rather than `{\tt y}' to confirm changing form due to lycanthropy diff --git a/include/flag.h b/include/flag.h index 5370faab7..3b429e01f 100644 --- a/include/flag.h +++ b/include/flag.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 flag.h $NHDT-Date: 1569276988 2019/09/23 22:16:28 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.155 $ */ +/* NetHack 3.6 flag.h $NHDT-Date: 1574900824 2019/11/28 00:27:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.160 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2006. */ /* NetHack may be freely redistributed. See license for details. */ @@ -106,6 +106,7 @@ struct flag { #define PARANOID_REMOVE 0x0040 #define PARANOID_BREAKWAND 0x0080 #define PARANOID_WERECHANGE 0x0100 +#define PARANOID_EATING 0x0200 int pickup_burden; /* maximum burden before prompt */ int pile_limit; /* controls feedback when walking over objects */ char inv_order[MAXOCLASSES]; @@ -520,6 +521,9 @@ enum runmode_types { /* werechange: accepting randomly timed werecreature change to transform from human to creature or vice versa while having polymorph control */ #define ParanoidWerechange ((flags.paranoia_bits & PARANOID_WERECHANGE) != 0) +/* continue eating: prompt given _after_first_bite_ when eating something + while satiated */ +#define ParanoidEating ((flags.paranoia_bits & PARANOID_EATING) != 0) /* command parsing, mainly dealing with number_pad handling; not saved and restored */ diff --git a/src/eat.c b/src/eat.c index 9620c372f..5e2aa1a09 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 eat.c $NHDT-Date: 1573346189 2019/11/10 00:36:29 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.205 $ */ +/* NetHack 3.6 eat.c $NHDT-Date: 1574900825 2019/11/28 00:27:05 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.206 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2875,23 +2875,20 @@ int num; /* Have lesshungry() report when you're nearly full so all eating * warns when you're about to choke. */ - if (u.uhunger >= 1500) { - if (!context.victual.eating - || (context.victual.eating && !context.victual.fullwarn)) { - pline("You're having a hard time getting all of it down."); - nomovemsg = "You're finally finished."; - if (!context.victual.eating) { - multi = -2; - } else { - context.victual.fullwarn = TRUE; - if (context.victual.canchoke - && context.victual.reqtime > 1) { - /* a one-gulp food will not survive a stop */ - if (yn_function("Continue eating?", ynchars, 'n') - != 'y') { - reset_eat(); - nomovemsg = (char *) 0; - } + if (u.uhunger >= 1500 + && (!context.victual.eating + || (context.victual.eating && !context.victual.fullwarn))) { + pline("You're having a hard time getting all of it down."); + nomovemsg = "You're finally finished."; + if (!context.victual.eating) { + multi = -2; + } else { + context.victual.fullwarn = TRUE; + if (context.victual.canchoke && context.victual.reqtime > 1) { + /* a one-gulp food will not survive a stop */ + if (!paranoid_query(ParanoidEating, "Continue eating?")) { + reset_eat(); + nomovemsg = (char *) 0; } } } diff --git a/src/options.c b/src/options.c index ecb0d773b..77fd14b79 100644 --- a/src/options.c +++ b/src/options.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 options.c $NHDT-Date: 1573505739 2019/11/11 20:55:39 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.386 $ */ +/* NetHack 3.6 options.c $NHDT-Date: 1574900826 2019/11/28 00:27:06 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.388 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2008. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1313,12 +1313,13 @@ STATIC_VAR const struct paranoia_opts { and "d"ie vs "d"eath, synonyms for each other so doesn't matter; (also "p"ray vs "P"aranoia, "pray" takes precedence since "Paranoia" is just a synonym for "Confirm"); "b"ones vs "br"eak-wand, the - latter requires at least two letters; "wand"-break vs "Were"-change, + latter requires at least two letters; "e"at vs "ex"plore, + "cont"inue eating vs "C"onfirm; "wand"-break vs "Were"-change, both require at least two letters during config processing and use case-senstivity for 'O's interactive menu */ { PARANOID_CONFIRM, "Confirm", 1, "Paranoia", 2, "for \"yes\" confirmations, require \"no\" to reject" }, - { PARANOID_QUIT, "quit", 1, "explore", 1, + { PARANOID_QUIT, "quit", 1, "explore", 2, "yes vs y to quit or to enter explore mode" }, { PARANOID_DIE, "die", 1, "death", 2, "yes vs y to die (explore mode or debug mode)" }, @@ -1328,6 +1329,8 @@ STATIC_VAR const struct paranoia_opts { "yes vs y to attack a peaceful monster" }, { PARANOID_BREAKWAND, "wand-break", 2, "break-wand", 2, "yes vs y to break a wand via (a)pply" }, + { PARANOID_EATING, "eat", 1, "continue", 4, + "yes vs y to continue eating after first bite when satiated" }, { PARANOID_WERECHANGE, "Were-change", 2, (const char *) 0, 0, "yes vs y to change form when lycanthropy is controllable" }, { PARANOID_PRAY, "pray", 1, 0, 0,