-.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.224 $ $NHDT-Date: 1498078870 2017/06/21 21:01:10 $
+.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.233 $ $NHDT-Date: 1505214878 2017/09/12 11:14:38 $
.ds h0 "NetHack Guidebook
.ds h1
.ds h2 %
Wait or rest, do nothing for one turn.
.lp a
Apply (use) a tool (pick-axe, key, lamp...).
+.lp ""
+If used on a wand, that wand will be broken, releasing its magic in the
+process. Confirmation is required.
.lp A
Remove one or more worn items, such as armor.
.lp ""
.lp #annotate
Allows you to specify one line of text to associate with the current
dungeon level. All levels with annotations are displayed by the
-``#overview'' command. Autocompletes. Default key is 'M-A', and '^N' if number_pad is on.
+``#overview'' command. Autocompletes. Default key is 'M-A', and '^N'
+if number_pad is on.
.lp #apply
Apply (use) a tool such as a pick-axe, a key, or a lamp. Default key is 'a'.
-If the tool used acts on items on the floor, using the `m' prefix skips those items.
+.lp ""
+If the tool used acts on items on the floor, using the `m' prefix skips
+those items.
+.lp ""
+If used on a wand, that wand will be broken, releasing its magic in the
+process. Confirmation is required.
.lp #attributes
Show your attributes. Default key is '^X'.
.lp #autopickup
.lp paranoid_confirmation
A space separated list of specific situations where alternate
prompting is desired. The default is paranoid_confirmation:pray.
-.PS Confirm
+.PS Were-change
.PL Confirm
for any prompts which are set to require "yes" rather than 'y', also
require "no" to reject instead of accepting any non-yes response as no
bones data when dying in debug mode;
.PL attack
require "yes" rather than 'y' to confirm attacking a peaceful monster;
+.PL wand-break
+require "yes" rather than 'y' to confirm breaking a wand;
+.PL Were-change
+require "yes" rather than 'y' to confirm changing form due to lycanthropy
+when hero has polymorph control;
.PL pray
require 'y' to confirm an attempt to pray rather
than immediately praying; on by default;
-.PL wand
-require "yes" rather than 'y' to confirm breaking a wand;
.PL Remove
require selection from inventory for 'R' and 'T'
commands even when wearing just one applicable item.
Wait or rest, do nothing for one turn.
%.lp
\item[\tb{a}]
-Apply (use) a tool (pick-axe, key, lamp \ldots).
+Apply (use) a tool (pick-axe, key, lamp \ldots).\\
+%.lp ""
+If used on a wand, that wand will be broken, releasing its magic in the
+process. Confirmation is required.
%.lp
\item[\tb{A}]
Remove one or more worn items, such as armor.\\
%.lp
\item[\tb{\#apply}]
Apply (use) a tool such as a pick-axe, a key, or a lamp.
-Default key is '{\tt a}'.
+Default key is '{\tt a}'.\\
If the tool used acts on items on the floor, using the `{\tt m}' prefix
-skips those items.
+skips those items.\\
+%.lp ""
+If used on a wand, that wand will be broken, releasing its magic in the
+process. Confirmation is required.
%.lp
\item[\tb{\#attributes}]
Show your attributes. Default key is '{\tt \^{}X}'.\\
%.sd
%.si
\newlength{\pcwidth}
-\settowidth{\pcwidth}{\tt Confirm}
+\settowidth{\pcwidth}{\tt Were-change}
\addtolength{\pcwidth}{\labelsep}
\blist{\leftmargin \pcwidth \topsep 1mm \itemsep 0mm}
\item[{\tt Confirm}]
\item[{\tt attack~}]
require ``{\tt yes}'' rather than `{\tt y}' to confirm attacking
a peaceful monster;
+\item[{\tt wand-break}]
+require ``{\tt yes}'' rather than `{\tt y}' to confirm breaking
+a wand;
+\item[{\tt Were-change}]
+require ``{\tt yes}'' rather than `{\tt y}' to confirm changing form
+due to lycanthropy
+when hero has polymorph control;
\item[{\tt pray~~~}]
require `{\tt y}' to confirm an attempt to pray rather
than immediately praying; on by default;
-\item[{\tt wand}]
-require ``{\tt yes}'' rather than `{\tt y}' to confirm breaking
-a wand;
-\item[{\tt Remove~}] require selection from inventory for `{\tt R}' and `{\tt T}'
+\item[{\tt Remove~}] require selection from inventory for `{\tt R}'
+and `{\tt T}'
commands even when wearing just one applicable item.
\item[{\tt all~~~~}]
turn on all of the above.
sysconf definition BONES_POOLS to allow more bones files per level
blessed scroll of fire lets you choose explosion location like stinking cloud
optional sections in the config file, selected with CHOOSE
+new paranoid_confirm settings: wand-break to require "yes" rather than 'y'
+ to break a wand via (a)pply, and Were-change to require "yes" rather
+ than 'y' when hero inflicted with lycanthropy has polymorph control
Platform- and/or Interface-Specific New Features
-/* NetHack 3.6 flag.h $NHDT-Date: 1498078871 2017/06/21 21:01:11 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.119 $ */
+/* NetHack 3.6 flag.h $NHDT-Date: 1505214875 2017/09/12 11:14:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.123 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
unsigned long suppress_alert;
#define NEW_MOON 0
#define FULL_MOON 4
- int paranoia_bits; /* alternate confirmation prompting */
-#define PARANOID_CONFIRM 0x01
-#define PARANOID_QUIT 0x02
-#define PARANOID_DIE 0x04
-#define PARANOID_BONES 0x08
-#define PARANOID_HIT 0x10
-#define PARANOID_PRAY 0x20
-#define PARANOID_REMOVE 0x40
-#define PARANOID_BREAKWAND 0x80
+ unsigned paranoia_bits; /* alternate confirmation prompting */
+#define PARANOID_CONFIRM 0x0001
+#define PARANOID_QUIT 0x0002
+#define PARANOID_DIE 0x0004
+#define PARANOID_BONES 0x0008
+#define PARANOID_HIT 0x0010
+#define PARANOID_PRAY 0x0020
+#define PARANOID_REMOVE 0x0040
+#define PARANOID_BREAKWAND 0x0080
+#define PARANOID_WERECHANGE 0x0100
int pickup_burden; /* maximum burden before prompt */
int pile_limit; /* controls feedback when walking over objects */
char inv_order[MAXOCLASSES];
#define ParanoidRemove ((flags.paranoia_bits & PARANOID_REMOVE) != 0)
/* breakwand: Applying a wand */
#define ParanoidBreakwand ((flags.paranoia_bits & PARANOID_BREAKWAND) != 0)
+/* 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)
/* command parsing, mainly dealing with number_pad handling;
not saved and restored */
-/* NetHack 3.6 options.c $NHDT-Date: 1505084668 2017/09/10 23:04:28 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.301 $ */
+/* NetHack 3.6 options.c $NHDT-Date: 1505214875 2017/09/12 11:14:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.302 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
takes precedence and "all" isn't present in the interactive menu,
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") */
+ is just a synonym for "Confirm"); "b"ones vs "br"eak-wand, the
+ latter requires at least two letters; "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,
"yes vs y to save bones data when dying in debug mode" },
{ PARANOID_HIT, "attack", 1, "hit", 1,
"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_WERECHANGE, "Were-change", 2, (const char *) 0, 0,
+ "yes vs y to change form when lycanthropy is controllable" },
{ PARANOID_PRAY, "pray", 1, 0, 0,
"y to pray (supersedes old \"prayconfirm\" option)" },
{ PARANOID_REMOVE, "Remove", 1, "Takeoff", 1,
"always pick from inventory for Remove and Takeoff" },
- { PARANOID_BREAKWAND, "wand", 1, "breakwand", 2,
- "yes vs y to break a wand" },
/* for config file parsing; interactive menu skips these */
{ 0, "none", 4, 0, 0, 0 }, /* require full word match */
{ ~0, "all", 3, 0, 0, 0 }, /* ditto */
if (i == SIZE(paranoia)) {
/* didn't match anything, so arg is bad;
any flags already set will stay set */
- config_error_add("Unknown %s parameter '%s'", fullname, op);
+ config_error_add("Unknown %s parameter '%s'",
+ fullname, op);
return FALSE;
}
/* move on to next token */
char tmpbuf[QBUFSZ];
tmpbuf[0] = '\0';
- if (ParanoidConfirm)
- Strcat(tmpbuf, " Confirm");
- if (ParanoidQuit)
- Strcat(tmpbuf, " quit");
- if (ParanoidDie)
- Strcat(tmpbuf, " die");
- if (ParanoidBones)
- Strcat(tmpbuf, " bones");
- if (ParanoidHit)
- Strcat(tmpbuf, " attack");
- if (ParanoidPray)
- Strcat(tmpbuf, " pray");
- if (ParanoidRemove)
- Strcat(tmpbuf, " Remove");
+ for (i = 0; paranoia[i].flagmask != 0; ++i)
+ if (flags.paranoia_bits & paranoia[i].flagmask)
+ Sprintf(eos(tmpbuf), " %s", paranoia[i].argname);
Strcpy(buf, tmpbuf[0] ? &tmpbuf[1] : "none");
} else if (!strcmp(optname, "pettype")) {
Sprintf(buf, "%s", (preferred_pet == 'c') ? "cat"
-/* NetHack 3.6 timeout.c $NHDT-Date: 1496619133 2017/06/04 23:32:13 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.71 $ */
+/* NetHack 3.6 timeout.c $NHDT-Date: 1505214876 2017/09/12 11:14:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.75 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
if (u.mtimedone && !--u.mtimedone) {
if (Unchanging)
u.mtimedone = rnd(100 * youmonst.data->mlevel + 1);
+ else if (is_were(youmonst.data))
+ you_unwere(FALSE); /* if polycontrl, asks whether to rehumanize */
else
rehumanize();
}
-/* NetHack 3.6 were.c $NHDT-Date: 1432512763 2015/05/25 00:12:43 $ $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */
+/* NetHack 3.6 were.c $NHDT-Date: 1505214877 2017/09/12 11:14:37 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
/* `+4' => skip "were" prefix to get name of beast */
Sprintf(qbuf, "Do you want to change into %s?",
an(mons[u.ulycn].mname + 4));
- if (yn(qbuf) == 'n')
+ if (!paranoid_query(ParanoidWerechange, qbuf))
return;
}
(void) polymon(u.ulycn);
set_ulycn(NON_PM); /* cure lycanthropy */
}
if (!Unchanging && is_were(youmonst.data)
- && (!controllable_poly || yn("Remain in beast form?") == 'n'))
+ && (!controllable_poly
+ || !paranoid_query(ParanoidWerechange, "Remain in beast form?")))
rehumanize();
+ else if (is_were(youmonst.data) && !u.mtimedone)
+ u.mtimedone = rn1(200, 200); /* 40% of initial were change */
}
/* lycanthropy is being caught or cured, but no shape change is involved */