From fb5e6a7bb39be36f6ccfd6e4b614aa0112d93f16 Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 11 Feb 2019 12:23:00 -0500 Subject: [PATCH 1/6] arrange platform/interface fixes alphabetically by platform in fixes36.2 --- doc/fixes36.2 | 62 +++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 2ef6a1504..22fa78179 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -458,6 +458,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 ' 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 +518,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 ' 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 From 4150d0b443ee67dc15fcedb141288f227e1a0836 Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 11 Feb 2019 12:28:57 -0500 Subject: [PATCH 2/6] use the NetHack macro NHSTDC in makedefs --- util/makedefs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/makedefs.c b/util/makedefs.c index 33cf3b2a5..04519c8dc 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -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 From 684fee0f64b26a8ed7f86b54cddf7586254d3c53 Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 11 Feb 2019 14:35:25 -0500 Subject: [PATCH 3/6] typo --- doc/Guidebook.mn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 04c6dc040..bab1e63f1 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -4945,7 +4945,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 From 4bb556096133a6d9a03309e6c499bcf55cc5e487 Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 11 Feb 2019 13:39:34 -0800 Subject: [PATCH 4/6] more #H8167 - late messages Do late message suppression in a different fashion. Also, there are more messages than shk taking hero's possessions and guard taking hero's gold that need to be suppressed if regular message delivery is no longer possible: "do not pass Go", "you arise from the grave as a foo", "the corridor disappears", "you are encased in the rock". Those last two are from vault handling but take place in a convoluted manner: paygd -> mongone -> grddead -> clear_fcorr. --- include/extern.h | 6 +++--- src/end.c | 18 ++++++++++++------ src/shk.c | 28 +++++++++++++--------------- src/vault.c | 34 +++++++++++++++++----------------- 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/include/extern.h b/include/extern.h index af0e6147f..5160007ba 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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)); diff --git a/src/end.c b/src/end.c index ee2df7537..b1f5e39a3 100644 --- a/src/end.c +++ b/src/end.c @@ -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 */ diff --git a/src/shk.c b/src/shk.c index 701f41e12..a72152f12 100644 --- a/src/shk.c +++ b/src/shk.c @@ -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 ", diff --git a/src/vault.c b/src/vault.c index 32c5cb490..0e86803da 100644 --- a/src/vault.c +++ b/src/vault.c @@ -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 From 1a8a774719abe55b5a57f63cc43f183339dc6433 Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 11 Feb 2019 16:30:46 -0800 Subject: [PATCH 5/6] Guidebook tweak - options parsing --- doc/Guidebook.mn | 15 +++++++++++---- doc/Guidebook.tex | 11 ++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index bab1e63f1..75f4730d0 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -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. diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 5011da014..a6d433b07 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -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 From a41d63d146b7a7ad9e4c2f99730e939e69cc295c Mon Sep 17 00:00:00 2001 From: PatR Date: Tue, 12 Feb 2019 15:40:05 -0800 Subject: [PATCH 6/6] fix #H8183 - leather jacket doesn't show AC Leather jacket doesn't take multiple turns to wear, so wearing it wasn't calling Armor_on() and recently moved 'uarm->known = 1' didn't get executed. Not reported yet but had the same issue: fedora and dented pot wouldn't call Helmet_on(). --- doc/fixes36.2 | 5 ++++- src/do_wear.c | 35 ++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 22fa78179..9c472f09b 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -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 in your hands, but it disappears") would immediately segfault tty: turn off an optimization that is the suspected cause of Windows reported diff --git a/src/do_wear.c b/src/do_wear.c index 0c3a4c1f8..793abfab5 100644 --- a/src/do_wear.c +++ b/src/do_wear.c @@ -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;