Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2

This commit is contained in:
nhmall
2019-02-13 14:57:47 -05:00
9 changed files with 123 additions and 95 deletions

View File

@@ -1,4 +1,4 @@
.\" $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.292 $ $NHDT-Date: 1546984605 2019/01/08 21:56:45 $
.\" $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.296 $ $NHDT-Date: 1549931433 2019/02/12 00:30:33 $
.\"
.\" This is an excerpt from the 'roff' man page from the 'groff' package.
.\" NetHack's Guidebook.mn currently does *not* adhere to these guidelines.
@@ -2638,15 +2638,15 @@ Prefix a boolean option with \(lqno\(rq or \(oq!\(cq to turn it off.
For compound options, the option name and value are separated by a colon.
Some options are persistent, and apply only to new games.
You can specify multiple OPTIONS statements, and multiple options
in a single OPTIONS statement.
separated by commas in a single OPTIONS statement.
(Comma separated options are processed from right to left.)
.pg
Example:
.sd
.ft CR
OPTIONS=dogname:Fido
.\" '\(dq' == double quote; including a literal double quote here works
.\" for formatting but confuses Emacs' nroff-mode into thinking
.\" that the \fP is part of a string rather than a font toggle
.\" for formatting but confuses Emacs' nroff-mode
OPTIONS=!legacy,autopickup,pickup_types:$\(dq=/!?+
.ft
.ed
@@ -2802,6 +2802,13 @@ to that shell), or the pair of commands
.ED
in \fIsh\fP, \fIksh\fP, or \fIbash\fP.
.pg
The NETHACKOPTIONS value is effectively the same as a single OPTIONS
statement in a configuration file.
The \(lqOPTIONS=\(rq prefix is implied and comma separated options are
processed from right to left.
Other types of configuration statements such as BIND or MSGTYPE are
not allowed.
.pg
Instead of a comma-separated list of options,
NETHACKOPTIONS can be set to the full name of a configuration file you
want to use.
@@ -4945,7 +4952,7 @@ and in days past, devnull.net (gone for now, but not forgotten).
.pg
From time to time, some depraved individual out there in netland sends a
particularly intriguing modification to help out with the game. The NetHack
Develpment Team sometimes makes note of the names of the worst of these
Development Team sometimes makes note of the names of the worst of these
miscreants in this, the list of Dungeoneers:
.
.TS S

View File

@@ -2885,7 +2885,8 @@ Prefix a boolean option with `no' or `!' to turn it off.
For compound options, the option name and value are separated by a colon.
Some options are persistent, and apply only to new games.
You can specify multiple OPTIONS statements, and multiple options
in a single OPTIONS statement.
separated by commas in a single OPTIONS statement.
(Comma separated options are processed from right to left.)
%.pg
Example:
@@ -3075,6 +3076,14 @@ to that shell), or the pair of commands
\nd in {\it sh}, {\it ksh}, or {\it bash}.
%.pg
The NETHACKOPTIONS value is effectively the same as a single OPTIONS
statement in a configuration file.
The ``OPTIONS='' prefix is implied and comma separated options are
processed from right to left.
Other types of configuration statements such as BIND or MSGTYPE are
not allowed.
%.pg
Instead of a comma-separated list of options,
NETHACKOPTIONS can be set to the full name of a configuration file you

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.255 $ $NHDT-Date: 1549849509 2019/02/11 01:45:09 $
$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.257 $ $NHDT-Date: 1550014802 2019/02/12 23:40:02 $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
@@ -427,6 +427,9 @@ when engulfed while in a shop, dropping an item into the engulfer and then
using ':' to look at current location could cause a crash
when items were on the floor just inside a shop's door where the shopkeeper
doesn't buy and sell stuff, those items showed a 'for sale' price
after 'when donning armor, enchanment becomes known even if interrupted' fix,
wearing a leather jacket, fedora, or dented pot (no multi-turn delay
worn in a slot which usually has one) didn't make +/- become known
having an artifact wish be refused ("for a moment you feel <artifact> in
your hands, but it disappears") would immediately segfault
tty: turn off an optimization that is the suspected cause of Windows reported
@@ -458,6 +461,37 @@ move 'perm_invent' value from flags to iflags to keep it out of save files;
always define shell and suspend commands so that key bindings copied from one
platform to another work even if second one disables those commands
amiga: fix missing line continuation characters in Makefile
MacOSX: add curses window port
MacOSX: add Xcode project to sys/unixNetHack.xcodeproj
MacOSX: add Xcode supporting files README.xcode and XCode.xcconfig
containing important build info
Qt: add Qt5 specific hints file for linux and Mac OS X (Ray Chason)
Qt: enable compiling Qt5 on Windows (Ray Chason)
Qt: entering extended commands, hide non-matching ones
Qt: remember tile and font size
tty: significant optimizations for performance and per field rendering
tty: use WC2_FLUSH_STATUS to buffer changes until BL_FLUSH is received
tty: support BL_RESET in status_update to force an update to all status fields
tty: stop hitpointbar from jumping to 100% health at zero hit points
tty: try harder to prevent a disconnected terminal (SIGHUP) from running amok
and using up all available CPU time
tty: suppress intermediate 'Count: 123' prompt and getpos autodescribe
feedback from being included in ^P message recall
tty: ^P feedback with msg_window:full/combination/reverse containing output
from dolook/whatis could show strange characters for DECgraphics
unix: Makefile.src and Makefile.utl inadvertently relied on a 'gnu make'
extension when using $(VERBOSEMAKE) to reduce build-time feedback;
replace with $(QUIETCC) which operates the same but defaults to
verbose so doesn't use '$<' for multi-prerequisite targets unless
specifically requested; use 'make QUIETCC=1 <target>' to get the
3.6.1 behavior back
unix: add curses window port
vms: data file processing and playground setup were missing post-3.4.3 files
engrave, epitaph, and bogusmon made from corresponding *.txt
windows: Added ntassert() mechanism for Windows based port use
windows: heed OPTIONS=symset:default in config file if it is present
windows: add curses window port which can co-exist with tty in exe and be
selectable in user config file via OPTIONS=windowtype:curses
windows-gui: In nethackw, there could be conflicts between menu accelerators
and an extra choice accelerator to fix H7132.
windows-gui: recognize new BL_RESET in status_update; no change in behavior yet
@@ -487,37 +521,6 @@ windows-tty: add support for mouse_support:0 (disabled), mouse_support:1
(fully-functional including disabling QuickEdit on Windows console
because QuickEdit intercepts the mouse clicks so NetHack never sees
them), or mouse_support:2 (NetHack support on but QuickEdit left as is)
windows: Added ntassert() mechanism for Windows based port use
windows: heed OPTIONS=symset:default in config file if it is present
windows: add curses window port which can co-exist with tty in exe and be
selectable in user config file via OPTIONS=windowtype:curses
tty: significant optimizations for performance and per field rendering
tty: use WC2_FLUSH_STATUS to buffer changes until BL_FLUSH is received
tty: support BL_RESET in status_update to force an update to all status fields
tty: stop hitpointbar from jumping to 100% health at zero hit points
tty: try harder to prevent a disconnected terminal (SIGHUP) from running amok
and using up all available CPU time
tty: suppress intermediate 'Count: 123' prompt and getpos autodescribe
feedback from being included in ^P message recall
tty: ^P feedback with msg_window:full/combination/reverse containing output
from dolook/whatis could show strange characters for DECgraphics
MacOSX: add curses window port
MacOSX: add Xcode project to sys/unixNetHack.xcodeproj
MacOSX: add Xcode supporting files README.xcode and XCode.xcconfig
containing important build info
unix: Makefile.src and Makefile.utl inadvertently relied on a 'gnu make'
extension when using $(VERBOSEMAKE) to reduce build-time feedback;
replace with $(QUIETCC) which operates the same but defaults to
verbose so doesn't use '$<' for multi-prerequisite targets unless
specifically requested; use 'make QUIETCC=1 <target>' to get the
3.6.1 behavior back
unix: add curses window port
vms: data file processing and playground setup were missing post-3.4.3 files
engrave, epitaph, and bogusmon made from corresponding *.txt
Qt: add Qt5 specific hints file for linux and Mac OS X (Ray Chason)
Qt: enable compiling Qt5 on Windows (Ray Chason)
Qt: entering extended commands, hide non-matching ones
Qt: remember tile and font size
X11: implement menucolors and allow menus to obey some attributes
X11: make key translations work with menus on Linux
X11: allow mouse wheel scrolling to work in menus by default

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 extern.h $NHDT-Date: 1549157811 2019/02/03 01:36:51 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.692 $ */
/* NetHack 3.6 extern.h $NHDT-Date: 1549921169 2019/02/11 21:39:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.693 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
@@ -2222,7 +2222,7 @@ E void FDECL(make_happy_shoppers, (BOOLEAN_P));
E void FDECL(hot_pursuit, (struct monst *));
E void FDECL(make_angry_shk, (struct monst *, XCHAR_P, XCHAR_P));
E int NDECL(dopay);
E boolean FDECL(paybill, (int));
E boolean FDECL(paybill, (int, BOOLEAN_P));
E void NDECL(finish_paybill);
E struct obj *FDECL(find_oid, (unsigned));
E long FDECL(contained_cost,
@@ -2592,7 +2592,7 @@ E char FDECL(vault_occupied, (char *));
E void FDECL(uleftvault, (struct monst *));
E void NDECL(invault);
E int FDECL(gd_move, (struct monst *));
E void NDECL(paygd);
E void FDECL(paygd, (BOOLEAN_P));
E long NDECL(hidden_gold);
E boolean NDECL(gd_sound);
E void FDECL(vault_gd_watching, (unsigned int));

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 do_wear.c $NHDT-Date: 1549758452 2019/02/10 00:27:32 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.106 $ */
/* NetHack 3.6 do_wear.c $NHDT-Date: 1550014802 2019/02/12 23:40:02 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.107 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1928,26 +1928,31 @@ struct obj *obj;
obj->known = 1;
*/
setworn(obj, mask);
/* if there's no delay, we'll execute 'aftermv' immediately */
if (obj == uarm)
afternmv = Armor_on;
else if (obj == uarmh)
afternmv = Helmet_on;
else if (obj == uarmg)
afternmv = Gloves_on;
else if (obj == uarmf)
afternmv = Boots_on;
else if (obj == uarms)
afternmv = Shield_on;
else if (obj == uarmc)
afternmv = Cloak_on;
else if (obj == uarmu)
afternmv = Shirt_on;
else
panic("wearing armor not worn as armor? [%08lx]", obj->owornmask);
delay = -objects[obj->otyp].oc_delay;
if (delay) {
nomul(delay);
multi_reason = "dressing up";
if (is_boots(obj))
afternmv = Boots_on;
if (is_helmet(obj))
afternmv = Helmet_on;
if (is_gloves(obj))
afternmv = Gloves_on;
if (obj == uarm)
afternmv = Armor_on;
nomovemsg = "You finish your dressing maneuver.";
} else {
if (is_cloak(obj))
(void) Cloak_on();
if (is_shield(obj))
(void) Shield_on();
if (is_shirt(obj))
(void) Shirt_on();
unmul(""); /* call (*aftermv)(), clear it+nomovemsg+multi_reason */
on_msg(obj);
}
context.takeoff.mask = context.takeoff.what = 0L;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 end.c $NHDT-Date: 1545786454 2018/12/26 01:07:34 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.162 $ */
/* NetHack 3.6 end.c $NHDT-Date: 1549921169 2019/02/11 21:39:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.163 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1149,6 +1149,10 @@ int how;
program_state.gameover = 1;
/* in case of a subsequent panic(), there's no point trying to save */
program_state.something_worth_saving = 0;
#ifdef HANGUPHANDLING
if (program_state.done_hup)
done_stopprint++;
#endif
/* render vision subsystem inoperative */
iflags.vision_inited = 0;
@@ -1173,8 +1177,8 @@ int how;
* On those rare occasions you get hosed immediately, go out
* smiling... :-) -3.
*/
if (moves <= 1 && how < PANICKED) /* You die... --More-- */
pline("Do not pass go. Do not collect 200 %s.", currency(200L));
if (moves <= 1 && how < PANICKED && !done_stopprint)
pline("Do not pass Go. Do not collect 200 %s.", currency(200L));
if (have_windows)
wait_synch(); /* flush screen output */
@@ -1220,9 +1224,11 @@ int how;
fixup_death(how); /* actually, fixup multi_reason */
if (how != PANICKED) {
boolean silently = done_stopprint ? TRUE : FALSE;
/* these affect score and/or bones, but avoid them during panic */
taken = paybill((how == ESCAPED) ? -1 : (how != QUIT));
paygd();
taken = paybill((how == ESCAPED) ? -1 : (how != QUIT), silently);
paygd(silently);
clearpriests();
} else
taken = FALSE; /* lint; assert( !bones_ok ); */
@@ -1329,7 +1335,7 @@ int how;
}
}
if (u.ugrave_arise >= LOW_PM) {
if (u.ugrave_arise >= LOW_PM && !done_stopprint) {
/* give this feedback even if bones aren't going to be created,
so that its presence or absence doesn't tip off the player to
new bones or their lack; it might be a lie if makemon fails */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 shk.c $NHDT-Date: 1549849510 2019/02/11 01:45:10 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.155 $ */
/* NetHack 3.6 shk.c $NHDT-Date: 1549921170 2019/02/11 21:39:30 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.156 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
@@ -56,7 +56,7 @@ STATIC_DCL long FDECL(getprice, (struct obj *, BOOLEAN_P));
STATIC_DCL void FDECL(shk_names_obj, (struct monst *, struct obj *,
const char *, long, const char *));
STATIC_DCL struct obj *FDECL(bp_to_obj, (struct bill_x *));
STATIC_DCL boolean FDECL(inherits, (struct monst *, int, int));
STATIC_DCL boolean FDECL(inherits, (struct monst *, int, int, BOOLEAN_P));
STATIC_DCL void FDECL(set_repo_loc, (struct monst *));
STATIC_DCL boolean NDECL(angry_shk_exists);
STATIC_DCL void FDECL(rile_shk, (struct monst *));
@@ -1686,8 +1686,9 @@ static struct repo { /* repossession context */
/* routine called after dying (or quitting) */
boolean
paybill(croaked)
paybill(croaked, silently)
int croaked; /* -1: escaped dungeon; 0: quit; 1: died */
boolean silently; /* maybe avoid messages */
{
struct monst *mtmp, *mtmp2, *firstshk, *resident, *creditor, *hostile,
*localshk;
@@ -1752,7 +1753,7 @@ int croaked; /* -1: escaped dungeon; 0: quit; 1: died */
: localshk;
if (firstshk) {
numsk++;
taken = inherits(firstshk, numsk, croaked);
taken = inherits(firstshk, numsk, croaked, silently);
}
/* now handle the rest */
@@ -1763,7 +1764,7 @@ int croaked; /* -1: escaped dungeon; 0: quit; 1: died */
local = on_level(&eshkp->shoplevel, &u.uz);
if (mtmp != firstshk) {
numsk++;
taken |= inherits(mtmp, numsk, croaked);
taken |= inherits(mtmp, numsk, croaked, silently);
}
/* for bones: we don't want a shopless shk around */
if (!local)
@@ -1773,23 +1774,20 @@ int croaked; /* -1: escaped dungeon; 0: quit; 1: died */
}
STATIC_OVL boolean
inherits(shkp, numsk, croaked)
inherits(shkp, numsk, croaked, silently)
struct monst *shkp;
int numsk;
int croaked;
boolean silently;
{
long loss = 0L;
long umoney;
struct eshk *eshkp = ESHK(shkp);
boolean take = FALSE, taken = FALSE, verbose;
boolean take = FALSE, taken = FALSE;
unsigned save_minvis = shkp->minvis;
int roomno = *u.ushops;
char takes[BUFSZ];
verbose = !program_state.stopprint;
#ifdef HANGUPHANDLING
verbose &= !program_state.done_hup;
#endif
/* not strictly consistent; affects messages and prevents next player
(if bones are saved) from blundering into or being ambused by an
invisible shopkeeper */
@@ -1797,7 +1795,7 @@ int croaked;
/* The simplifying principle is that first-come
already took everything you had. */
if (numsk > 1) {
if (verbose && cansee(shkp->mx, shkp->my) && croaked) {
if (cansee(shkp->mx, shkp->my) && croaked && !silently) {
takes[0] = '\0';
if (has_head(shkp->data) && !rn2(2))
Sprintf(takes, ", shakes %s %s,", noit_mhis(shkp),
@@ -1817,7 +1815,7 @@ int croaked;
&& !eshkp->robbed && !eshkp->debit && NOTANGRY(shkp)
&& !eshkp->following && u.ugrave_arise < LOW_PM) {
taken = (invent != 0);
if (taken && verbose)
if (taken && !silently)
pline("%s gratefully inherits all your possessions.",
Shknam(shkp));
set_repo_loc(shkp);
@@ -1851,7 +1849,7 @@ int croaked;
money2mon(shkp, umoney);
context.botl = 1;
}
if (verbose)
if (!silently)
pline("%s %s all your possessions.", Shknam(shkp), takes);
taken = TRUE;
/* where to put player's invent (after disclosure) */
@@ -1859,7 +1857,7 @@ int croaked;
} else {
money2mon(shkp, loss);
context.botl = 1;
if (verbose)
if (!silently)
pline("%s %s the %ld %s %sowed %s.", Shknam(shkp),
takes, loss, currency(loss),
strncmp(eshkp->customer, plname, PL_NSIZ) ? "" : "you ",

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 vault.c $NHDT-Date: 1549849513 2019/02/11 01:45:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.61 $ */
/* NetHack 3.6 vault.c $NHDT-Date: 1549921171 2019/02/11 21:39:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.62 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
@@ -49,7 +49,8 @@ boolean forceshow;
{
register int fcx, fcy, fcbeg;
struct monst *mtmp;
boolean sawcorridor = FALSE;
boolean sawcorridor = FALSE,
silently = program_state.stopprint ? TRUE : FALSE;
struct egd *egrd = EGD(grd);
struct trap *trap;
struct rm *lev;
@@ -101,11 +102,13 @@ boolean forceshow;
vision_full_recalc = 1;
egrd->fcbeg++;
}
if (sawcorridor)
if (sawcorridor && !silently)
pline_The("corridor disappears.");
/* only give encased message if hero is still alive (might get here
via paygd() when game is over; died: no message, quit: message) */
if (IS_ROCK(levl[u.ux][u.uy].typ) && (Upolyd ? u.mh : u.uhp) > 0)
via paygd() -> mongone() -> grddead() when game is over;
died: no message, quit: message) */
if (IS_ROCK(levl[u.ux][u.uy].typ) && (Upolyd ? u.mh : u.uhp) > 0
&& !silently)
You("are encased in rock.");
return TRUE;
}
@@ -1061,35 +1064,30 @@ register struct monst *grd;
/* Routine when dying or quitting with a vault guard around */
void
paygd()
paygd(silently)
boolean silently;
{
register struct monst *grd = findgd();
long umoney = money_cnt(invent);
struct obj *coins, *nextcoins;
int gx, gy;
char buf[BUFSZ];
boolean verbose;
if (!umoney || !grd)
return;
verbose = !program_state.stopprint;
#ifdef HANGUPHANDLING
verbose &= !program_state.done_hup;
#endif
if (u.uinvault) {
if (verbose)
if (!silently)
Your("%ld %s goes into the Magic Memory Vault.",
umoney, currency(umoney));
gx = u.ux;
gy = u.uy;
} else {
if (grd->mpeaceful) { /* guard has no "right" to your gold */
mongone(grd);
return;
}
if (grd->mpeaceful) /* peaceful guard has no "right" to your gold */
goto remove_guard;
mnexto(grd);
if (verbose)
if (!silently)
pline("%s remits your gold to the vault.", Monnam(grd));
gx = rooms[EGD(grd)->vroom].lx + rn2(2);
gy = rooms[EGD(grd)->vroom].ly + rn2(2);
@@ -1105,7 +1103,9 @@ paygd()
stackobj(coins);
}
}
remove_guard:
mongone(grd);
return;
}
long

View File

@@ -1577,7 +1577,7 @@ static const char *build_opts[] = {
#ifdef USE_ISAAC64
"pseudo random numbers generated by ISAAC64",
#ifdef DEV_RANDOM
#ifdef __STDC__
#ifdef NHSTDC
/* include which specific one */
"strong PRNG seed available from " DEV_RANDOM,
#else