delay code) if moving objects seem to teleport across rooms
perm_invent keep inventory in a permanent window [FALSE]
pickup_thrown override pickup_types for thrown objects [TRUE]
-prayconfirm use confirmation prompt when #pray command issued [TRUE]
pushweapon when wielding a new weapon, put your previously
wielded weapon into the secondary weapon slot [FALSE]
rawio allow the use of raw I/O [FALSE]
order in which your pack will be displayed [")[%?+!=/(*`0_]
(If you specify only some kinds of items, the others from the
default order will be appended to the end.)
+paranoid_confirmation space separated list of situations where alternate
+ prompting is desired [paranoid_confirmation:pray]
+ quit -- yes vs y to confirm quitting or to enter explore mode
+ die -- yes vs y to confirm dying (for explore or debug mode)
+ attack -- yes vs y to confirm attacking a peaceful monster
+ 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
pickup_burden when you pick up an item that exceeds this encumberance
level (Unencumbered, Burdened, streSsed, straiNed, overTaxed,
or overLoaded), you will be asked if you want to continue. [S]
The value of this option should be a string containing the
symbols for the various object types. Any omitted types are filled in
at the end from the previous order.
+.lp paranoid_confirmation
+A space separated list of specific situations where alternate
+prompting is desired. The default is paranoid_confirmation:pray.
+.sd
+.si
+quit - require "yes" rather than 'y' to confirm quitting
+ the game or switching into non-scoring explore mode;
+die - require "yes" rather than 'y' to confirm dying (not
+ useful in normal play; applies to explore mode);
+attack - require "yes" rather than 'y' to confirm attacking
+ a peaceful monster;
+pray - require 'y' to confirm an attempt to pray rather
+ than immediately praying; on by default;
+Remove - require selection from inventory for 'R' and 'T'
+ commands even when wearing just one applicable item.
+.ei
+.ed
+By default, the pray choice is enabled, the others disabled.
+To disable it without setting
+any of the other choices, use ``paranoid_confirmation:none''. To keep
+it enabled while setting any of the others, include it in the list,
+such as ``paranoid_confirmation:attack pray Remove''.
.lp perm_invent
If true, always display your current inventory in a window. This only
makes sense for windowing system interfaces that implement this feature.
name (on single-user systems) or it might be disabled entirely. Requesting
it when not allowed or not possible results in explore mode instead.
Default is normal play.
-.lp prayconfirm
-Prompt for confirmation before praying (default on).
.lp pushweapon
Using the `w' (wield) command when already wielding
something pushes the old item into your alternate weapon slot (default off).
\begin{document}
%
% input file: guidebook.mn
-% $Revision: 1.109 $ $Date: 2009/10/18 23:52:34 $
+% $Revision: 1.110 $ $Date: 2009/10/20 22:48:30 $
%
%.ds h0 "
%.ds h1 %.ds h2 \%
containing the symbols for the various object types. Any omitted types
are filled in at the end from the previous order.
%.lp
+\item[\ib{paranoid_confirmation}]
+A space separated list of specific situations where alternate
+prompting is desired. The default is ``{\tt paranoid_confirmation:pray}''.
+%.sd
+%.si
+\blist{} % this might look better as a table
+\item[{\tt quit}]
+require ``{\tt yes}'' rather than `{\tt y}' to confirm quitting
+the game or switching into non-scoring explore mode;
+\item[{\tt die}]
+require ``{\tt yes}'' rather than '{\tt y}' to confirm dying (not
+useful in normal play; applies to explore mode);
+\item[{\tt attack}]
+require ``{\tt yes}'' rather than '{\tt y}' to confirm attacking
+a peaceful monster;
+\item[{\tt pray}]
+require `{\tt y}' to confirm an attempt to pray rather
+than immediately praying; on by default;
+\item[{\tt Remove}] require selection from inventory for `{\tt R}' and `{\tt T}'
+commands even when wearing just one applicable item.
+\elist
+%.ei
+%.ed
+{\relax
+By default, the pray choice is enabled, the others disabled.
+To disable it without setting
+any of the other choices, use ``{\tt paranoid_confirmation:none}''. To keep
+it enabled while setting others, include it in the list,
+such as ``{\tt paranoid_con\-fir\-ma\-tion:\-attack~pray~Remove}''.
+}%relax
+%.lp
\item[\ib{perm\_invent}]
If true, always display your current inventory in a window. This only
makes sense for windowing system interfaces that implement this feature.
it will be silently ignored. For example, ``{\tt horse}'' will only be
honored when playing a knight.
Cannot be set with the `{\tt O}' command.
-%.Ip
+%.lp
\item[\ib{pickup\_burden}]
When you pick up an item that would exceed this encumbrance
level (Unencumbered, Burdened, streSsed, straiNed, overTaxed,
it when not allowed or not possible results in explore mode instead.
Default is normal play.
%.lp
-\item[\ib{prayconfirm}]
-Prompt for confirmation before praying (default on).
-%.lp
\item[\ib{pushweapon}]
Using the `w' (wield) command when already wielding
something pushes the old item into your alternate weapon slot (default off).
mimic posing as door might steal hero's key when [un]locking is attempted
polymorphing into a dragon while wearing dragon scale mail will cause that
mail to revert to dragon scales
+adopt/adapt/improve the Paranoid_Quit patch; default is paranoid_confirm:pray
+ paranoid_confirm:quit yes vs y to quit or to enter explore mode
+ paranoid_confirm:die yes vs y to die in explore or wizard mode
+ paranoid_confirm:attack yes vs y to attack a peaceful monster
+ paranoid_confirm:pray y to confirm #pray; supersedes prayconfirm
+ paranoid_confirm:Remove always pick from inventory for 'R' and 'T'
Platform- and/or Interface-Specific New Features
E void NDECL(sanity_check);
#endif
E char FDECL(yn_function, (const char *, const char *, CHAR_P));
+E boolean FDECL(paranoid_query, (BOOLEAN_P,const char *));
/* ### dbridge.c ### */
* Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files.
*/
-#define EDITLEVEL 44
+#define EDITLEVEL 45
#define COPYRIGHT_BANNER_A \
-"NetHack, Copyright 1985-2009"
+"NetHack, Copyright 1985-2011"
#define COPYRIGHT_BANNER_B \
" By Stichting Mathematisch Centrum and M. Stephenson."
int
enter_explore_mode(VOID_ARGS)
{
- if(!discover && !wizard) {
- pline("Beware! From explore mode there will be no return to normal game.");
- if (yn("Do you want to enter explore mode?") == 'y') {
- clear_nhwindow(WIN_MESSAGE);
- You("are now in non-scoring explore mode.");
- discover = TRUE;
- }
- else {
- clear_nhwindow(WIN_MESSAGE);
- pline("Resuming normal game.");
- }
+ if (wizard) {
+#ifdef WIZARD
+ You("are in debug mode.");
+#endif
+ } else if (discover) {
+ You("are already in explore mode.");
+ } else {
+ pline(
+ "Beware! From explore mode there will be no return to normal game.");
+ if (paranoid_query(ParanoidQuit,
+ "Do you want to enter explore mode?")) {
+ clear_nhwindow(WIN_MESSAGE);
+ You("are now in non-scoring explore mode.");
+ discover = TRUE;
+ } else {
+ clear_nhwindow(WIN_MESSAGE);
+ pline("Resuming normal game.");
}
- return 0;
+ }
+ return 0;
}
#ifdef DUNGEON_OVERVIEW
return (*windowprocs.win_yn_function)(qbuf, resp, def);
}
+/* for paranoid_confirm:quit,die,attack prompting */
+boolean
+paranoid_query(be_paranoid, prompt)
+boolean be_paranoid;
+const char *prompt;
+{
+ char qbuf[QBUFSZ], ans[BUFSZ];
+ boolean confirmed_ok;
+
+ /* when paranoid, player must respond with "yes" rather than just 'y'
+ to give the go-ahead for this query; default is "no", obviously */
+ if (be_paranoid) {
+ Sprintf(qbuf, "%s (yes) [no]", prompt);
+ getlin(qbuf, ans);
+ (void) mungspaces(ans);
+ confirmed_ok = !strcmpi(ans, "yes");
+ } else
+ confirmed_ok = (yn(prompt) == 'y');
+
+ return confirmed_ok;
+}
+
int
dosuspend_core(){
#ifdef SUSPEND
" Use 'R' command to remove accessories." : "");
return 0;
}
- if (armorpieces > 1)
+ if (armorpieces > 1 || ParanoidRemove)
otmp = getobj(clothes, "take off");
- if (otmp == 0) return(0);
+ if (!otmp) return 0;
if (!(otmp->owornmask & W_ARMOR)) {
You("are not wearing that.");
- return(0);
+ return 0;
}
/* note: the `uskin' case shouldn't be able to happen here; dragons
can't wear any armor so will end up with `armorpieces == 0' above */
" Use 'T' command to take off armor." : "");
return(0);
}
- if (Accessories != 1) otmp = getobj(accessories, "remove");
- if(!otmp) return(0);
- if(!(otmp->owornmask & (W_RING | W_AMUL | W_TOOL))) {
+ if (Accessories > 1 || ParanoidRemove)
+ otmp = getobj(accessories, "remove");
+ if (!otmp) return 0;
+ if (!(otmp->owornmask & (W_RING | W_AMUL | W_TOOL))) {
You("are not wearing that.");
- return(0);
+ return 0;
}
reset_remarm(); /* clear context.takeoff.mask and context.takeoff.what */
int
done2()
{
- if(yn("Really quit?") == 'n') {
+ if (!paranoid_query(ParanoidQuit, "Really quit?")) {
#ifndef NO_SIGNAL
(void) signal(SIGINT, (SIG_RET_TYPE) done1);
#endif
wizard ||
#endif
discover) && (how <= GENOCIDED)) {
- if(yn("Die?") == 'y') goto die;
+ if (paranoid_query(ParanoidDie, "Die?")) goto die;
pline("OK, so you don't %s.",
(how == CHOKING) ? "choke" : "die");
savelife(how);
dopray()
{
/* Confirm accidental slips of Alt-P */
- if (flags.prayconfirm)
- if (yn("Are you sure you want to pray?") == 'n')
- return 0;
+ if (ParanoidPray && yn("Are you sure you want to pray?") != 'y')
+ return 0;
u.uconduct.gnostic++;
}
if (canspotmon(mtmp)) {
Sprintf(qbuf, "Really attack %s?", mon_nam(mtmp));
- if (yn(qbuf) != 'y') {
+ if (!paranoid_query(ParanoidHit, qbuf)) {
context.move = 0;
return(TRUE);
}