Merge branch 'NetHack-3.6'

This commit is contained in:
nhmall
2019-11-27 23:07:29 -05:00
10 changed files with 119 additions and 48 deletions

View File

@@ -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.

View File

@@ -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.7
.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;

View File

@@ -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

View File

@@ -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
@@ -471,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

View File

@@ -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. */
@@ -91,6 +91,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 sortloot; /* 'n'=none, 'l'=loot (pickup), 'f'=full ('l'+invent) */
@@ -506,6 +507,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 */

View File

@@ -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. */
@@ -1414,8 +1414,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();

View File

@@ -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 void FDECL(show_mon_or_warn, (int, int, int));
static void FDECL(display_monster,
(XCHAR_P, XCHAR_P, struct monst *, int, XCHAR_P));
static 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 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

View File

@@ -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. */
@@ -2869,23 +2869,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 (!g.context.victual.eating
|| (g.context.victual.eating && !g.context.victual.fullwarn)) {
pline("You're having a hard time getting all of it down.");
g.nomovemsg = "You're finally finished.";
if (!g.context.victual.eating) {
g.multi = -2;
} else {
g.context.victual.fullwarn = TRUE;
if (g.context.victual.canchoke
&& g.context.victual.reqtime > 1) {
/* a one-gulp food will not survive a stop */
if (yn_function("Continue eating?", ynchars, 'n')
!= 'y') {
reset_eat();
g.nomovemsg = (char *) 0;
}
if (u.uhunger >= 1500
&& (!g.context.victual.eating
|| (g.context.victual.eating && !g.context.victual.fullwarn))) {
pline("You're having a hard time getting all of it down.");
g.nomovemsg = "You're finally finished.";
if (!g.context.victual.eating) {
g.multi = -2;
} else {
g.context.victual.fullwarn = TRUE;
if (g.context.victual.canchoke && g.context.victual.reqtime > 1) {
/* a one-gulp food will not survive a stop */
if (!paranoid_query(ParanoidEating, "Continue eating?")) {
reset_eat();
g.nomovemsg = (char *) 0;
}
}
}

View File

@@ -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. */
@@ -1290,12 +1290,13 @@ static 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)" },
@@ -1305,6 +1306,8 @@ static 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,

View File

@@ -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';
ret = !g.Cmd.swap_yz ? 'y' : 'z';
}
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) {