From ead5b0f21019936c9b0aefb7b84e01e38b2705cd Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 12 Dec 2015 18:08:11 -0800 Subject: [PATCH 01/21] fix #H4061 - uncursed scroll of enchant armor In 3.4.3, reading an uncursed scroll of enchant armor while wearing a piece of cursed armor performed an uncurse as well as raising enchantment. A fairly big patch to redo how pending shop bills were affected by altering the items on the bill accidentally took away the uncurse part when modifying the scroll code to use the bless()/ uncurse()/curse() functions instead of manipulating the armor's blessed and cursed flags directly. --- doc/fixes36.1 | 2 ++ src/read.c | 17 +++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index ed314e2dd..65d8a83c6 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -15,6 +15,8 @@ support explicit 'symset:default' and 'symset:Default symbols' in options crash during startup if player name set as 'player' in defaults any existing vampire shape-shifted into critter (fog cloud, bat, wolf) became an unkillable critter if vampires were genocided +unlike in previous versions, an uncursed scroll of enchant armor failed to + uncurse the piece of armor being enchanted (change was unintentional) Platform- and/or Interface-Specific Fixes diff --git a/src/read.c b/src/read.c index 570ca74f8..617bb0dd9 100644 --- a/src/read.c +++ b/src/read.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 read.c $NHDT-Date: 1449645144 2015/12/09 07:12:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.126 $ */ +/* NetHack 3.6 read.c $NHDT-Date: 1449972474 2015/12/13 02:07:54 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.127 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1050,9 +1050,12 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ useup(otmp); break; } - s = scursed ? -1 : otmp->spe >= 9 - ? (rn2(otmp->spe) == 0) - : sblessed ? rnd(3 - otmp->spe / 3) : 1; + s = scursed ? -1 + : (otmp->spe >= 9) + ? (rn2(otmp->spe) == 0) + : sblessed + ? rnd(3 - otmp->spe / 3) + : 1; if (s >= 0 && Is_dragon_scales(otmp)) { /* dragon scales get turned into dragon scale mail */ pline("%s merges and hardens!", Yname2(otmp)); @@ -1075,8 +1078,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ s == 0 ? "violently " : "", otense(otmp, Blind ? "vibrate" : "glow"), (!Blind && !same_color) ? " " : "", - (Blind || same_color) ? "" - : hcolor(scursed ? NH_BLACK : NH_SILVER), + (Blind || same_color) + ? "" : hcolor(scursed ? NH_BLACK : NH_SILVER), (s * s > 1) ? "while" : "moment"); /* [this cost handling will need updating if shop pricing is ever changed to care about curse/bless status of armor] */ @@ -1086,6 +1089,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ curse(otmp); else if (sblessed && !otmp->blessed) bless(otmp); + else if (!scursed && otmp->cursed) + uncurse(otmp); if (s) { otmp->spe += s; adj_abon(otmp, s); From 637f4a4bd69028cb044a1ce16100dcccc40acd3e Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 12 Dec 2015 18:59:21 -0800 Subject: [PATCH 02/21] fix bz55 - wrong plural for slice of cake Entered in bugzilla prior to release: "slice of birthday cake" became "slouse of birthday cake" when made plural. "slice of pizza" used to work, but adding an entry for "louse" <-> "lice" to one of the special handling lists for singular/plural broke "slice" since only a trailing substring match is performed for entries in that particular list. --- doc/fixes36.1 | 2 ++ src/objnam.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 65d8a83c6..7558e4648 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -17,6 +17,8 @@ any existing vampire shape-shifted into critter (fog cloud, bat, wolf) became an unkillable critter if vampires were genocided unlike in previous versions, an uncursed scroll of enchant armor failed to uncurse the piece of armor being enchanted (change was unintentional) +slice of {pizza,cake,&} pluralized as "slouse of ..." due to false match + with "lice" (discovered pre-3.6.0-release) Platform- and/or Interface-Specific Fixes diff --git a/src/objnam.c b/src/objnam.c index bf68842e7..7e3f6aea1 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 objnam.c $NHDT-Date: 1449740045 2015/12/10 09:34:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.155 $ */ +/* NetHack 3.6 objnam.c $NHDT-Date: 1449975408 2015/12/13 02:56:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.156 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1874,6 +1874,15 @@ const char *const *alt_as_is; /* another set like as_is[] */ } } + /* avoid false hit on one_off[].plur == "lice"; + if more of these turn up, one_off[] entries will need to flagged + as to which are whole words and which are matchable as suffices + then matching in the loop below will end up becoming more complex */ + if (!strcmpi(basestr, "slice")) { + if (to_plural) + (void) strkitten(basestr, 's'); + return TRUE; + } for (sp = one_off; sp->sing; sp++) { /* check whether endstring already matches */ same = to_plural ? sp->plur : sp->sing; From 807afa22b3f6bdc11ac9ecb5a89ee6028b9db339 Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 12 Dec 2015 19:41:35 -0800 Subject: [PATCH 03/21] fix #H4047 - dipping inconsistency Dip the scroll labeled LEP GEX VEN ZEA into the fountain? Your scroll called light fades. The first prompt deliberately avoided 'called', 'named', and other attributes to keep it short, but the discrepancy here is blatant, so increase the verbosity in order to have the reminder that's included in the prompt be the same as object name in the followup message. Bonus fix, noticed while testing it: water_damage() was reporting the "{blank,unlabeled} scroll fades" even though blank scrolls are already as faded as they can get. Likewise for blank spellbook. --- doc/fixes36.1 | 3 +++ src/potion.c | 17 +++++++++++------ src/trap.c | 10 ++++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 7558e4648..f673d44a9 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -19,6 +19,9 @@ unlike in previous versions, an uncursed scroll of enchant armor failed to uncurse the piece of armor being enchanted (change was unintentional) slice of {pizza,cake,&} pluralized as "slouse of ..." due to false match with "lice" (discovered pre-3.6.0-release) +change dipping prompt to not ignore 'called' and 'named' attributes of item + to be dipped +avoid 'the unlabeled {scroll,spellbook} fades' when blank item is hit by water Platform- and/or Interface-Specific Fixes diff --git a/src/potion.c b/src/potion.c index 7484d29d2..566eb7bfc 100644 --- a/src/potion.c +++ b/src/potion.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 potion.c $NHDT-Date: 1446861768 2015/11/07 02:02:48 $ $NHDT-Branch: master $:$NHDT-Revision: 1.121 $ */ +/* NetHack 3.6 potion.c $NHDT-Date: 1449977945 2015/12/13 03:39:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.122 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1759,6 +1759,7 @@ dodip() char allowall[2]; short mixture; char qbuf[QBUFSZ], qtoo[QBUFSZ]; + const char *shortestname; /* last resort obj name for prompt */ allowall[0] = ALL_CLASSES; allowall[1] = '\0'; @@ -1767,13 +1768,13 @@ dodip() if (inaccessible_equipment(obj, "dip", FALSE)) return 0; - Sprintf(qbuf, "dip %s into", thesimpleoname(obj)); + shortestname = is_plural(obj) ? "them" : "it"; here = levl[u.ux][u.uy].typ; /* Is there a fountain to dip into here? */ if (IS_FOUNTAIN(here)) { /* "Dip into the fountain?" */ - Sprintf(qtoo, "%s the fountain?", qbuf); - if (yn(upstart(qtoo)) == 'y') { + if (yn(safe_qbuf(qbuf, "Dip ", " into the fountain?", obj, + doname, thesimpleoname, shortestname)) == 'y') { dipfountain(obj); return 1; } @@ -1781,8 +1782,9 @@ dodip() const char *pooltype = waterbody_name(u.ux, u.uy); /* "Dip into the {pool, moat, &c}?" */ - Sprintf(qtoo, "%s the %s?", qbuf, pooltype); - if (yn(upstart(qtoo)) == 'y') { + Sprintf(qtoo, " into the %s?", pooltype); + if (yn(safe_qbuf(qbuf, "Dip ", qtoo, obj, + doname, thesimpleoname, shortestname)) == 'y') { if (Levitation) { floating_above(pooltype); } else if (u.usteed && !is_swimmer(u.usteed->data) @@ -1799,6 +1801,9 @@ dodip() } /* "What do you want to dip into?" */ + Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to dip ", " into?", obj, + doname, thesimpleoname, shortestname) + + sizeof "What do you want to " - sizeof ""); potion = getobj(beverages, qbuf); /* "dip into" */ if (!potion) return 0; diff --git a/src/trap.c b/src/trap.c index b8944eea9..747f626e6 100644 --- a/src/trap.c +++ b/src/trap.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 trap.c $NHDT-Date: 1448492213 2015/11/25 22:56:53 $ $NHDT-Branch: master $:$NHDT-Revision: 1.249 $ */ +/* NetHack 3.6 trap.c $NHDT-Date: 1449977947 2015/12/13 03:39:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.250 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3345,10 +3345,11 @@ boolean force; */ return ER_NOTHING; } else if (obj->oclass == SCROLL_CLASS) { + if (obj->otyp == SCR_BLANK_PAPER #ifdef MAIL - if (obj->otyp == SCR_MAIL) - return 0; + || obj->otyp == SCR_MAIL #endif + ) return 0; if (carried(obj)) pline("Your %s %s.", ostr, vtense(ostr, "fade")); @@ -3362,8 +3363,9 @@ boolean force; if (obj->otyp == SPE_BOOK_OF_THE_DEAD) { pline("Steam rises from %s.", the(xname(obj))); return 0; + } else if (obj->otyp == SPE_BLANK_PAPER) { + return 0; } - if (carried(obj)) pline("Your %s %s.", ostr, vtense(ostr, "fade")); From 4ad39ba2828854c8f844361d6247c0b96f892ce0 Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 12 Dec 2015 20:56:46 -0800 Subject: [PATCH 04/21] fix part of #H4062 - high priest name refusal High priests used a different message to refuse accepting a user-supplied name than regular temple priests because they're flagged as unique. The effect was cosmetic; it didn't reopen the hole that let you recognize which high priest was which via the 'C' command on the Astral Plane. [I never received the mail for #H4062 but saw it in bugzilla.] --- doc/fixes36.1 | 2 ++ src/do_name.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index f673d44a9..efd39ad2e 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -22,6 +22,8 @@ slice of {pizza,cake,&} pluralized as "slouse of ..." due to false match change dipping prompt to not ignore 'called' and 'named' attributes of item to be dipped avoid 'the unlabeled {scroll,spellbook} fades' when blank item is hit by water +wrong message given when high priest on astral plane rejects being assigned a + name (got the one for unique monsters instead of the one for priests) Platform- and/or Interface-Specific Fixes diff --git a/src/do_name.c b/src/do_name.c index 2592d7036..e033e46e0 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 do_name.c $NHDT-Date: 1449914085 2015/12/12 09:54:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.78 $ */ +/* NetHack 3.6 do_name.c $NHDT-Date: 1449982602 2015/12/13 04:56:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.79 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -463,7 +463,7 @@ do_mname() /* unique monsters have their own specific names or titles; shopkeepers, temple priests and other minions use alternate name formatting routines which ignore any user-supplied name */ - if (mtmp->data->geno & G_UNIQ) + if ((mtmp->data->geno & G_UNIQ) && !mtmp->ispriest) pline("%s doesn't like being called names!", upstart(monnambuf)); else if (mtmp->isshk && !(Deaf || mtmp->msleeping || !mtmp->mcanmove From 50065303e11176aac2598409c34a00f1cd8e9bd5 Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 13 Dec 2015 06:15:54 -0800 Subject: [PATCH 05/21] commit 8a13a4d2044264cf7427ba6a035021949788b5f1 Author: PatR Date: Sun Dec 13 06:06:58 2015 -0800 fix #H4066 - bug eating ring of protection Intrinsic protection of 0 (usually from having a gremlin steal divine protection, but also possible by eating a +0 ring of protection) does not contribute to "magic cancellation", the defense attribute that makes some special attacks fail. That's intended. Negative intrinsic protection (not possible from having divine protection, but turns out to be possible from eating negatively enchanted/charged rings of protection), did contribute. That wasn't intended, so stop it. (Positive intrinsic protection gives a magic cancellation of 1 if worn armor doesn't provide any MC.) --- doc/fixes36.1 | 2 ++ src/mhitu.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index efd39ad2e..e9d8a81bf 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -24,6 +24,8 @@ change dipping prompt to not ignore 'called' and 'named' attributes of item avoid 'the unlabeled {scroll,spellbook} fades' when blank item is hit by water wrong message given when high priest on astral plane rejects being assigned a name (got the one for unique monsters instead of the one for priests) +negative intrinsic protection shouldn't confer MC=1, "you are warded" (not + possible from divine protection but is possible from eating rings) Platform- and/or Interface-Specific Fixes diff --git a/src/mhitu.c b/src/mhitu.c index 2d489a1c2..998c86be1 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mhitu.c $NHDT-Date: 1446854230 2015/11/06 23:57:10 $ $NHDT-Branch: master $:$NHDT-Revision: 1.130 $ */ +/* NetHack 3.6 mhitu.c $NHDT-Date: 1450016149 2015/12/13 14:15:49 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.131 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -827,7 +827,7 @@ struct monst *mon; } else if (mc < 1) { /* intrinsic Protection is weaker (play balance; obtaining divine protection is too easy); it confers minimum mc 1 instead of 0 */ - if ((is_you && ((HProtection && u.ublessed) || u.uspellprot)) + if ((is_you && ((HProtection && u.ublessed > 0) || u.uspellprot)) /* aligned priests and angels have innate intrinsic Protection */ || (mon->data == &mons[PM_ALIGNED_PRIEST] || is_minion(mon->data))) mc = 1; From a1583244d6c209d52611fa74dfee8367cee02ca1 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 13 Dec 2015 13:34:47 -0500 Subject: [PATCH 06/21] a couple of false rumors --- dat/rumors.fal | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dat/rumors.fal b/dat/rumors.fal index 90675fb5f..ba01eb462 100644 --- a/dat/rumors.fal +++ b/dat/rumors.fal @@ -156,6 +156,7 @@ Some questions the Sphynx asks just *don't* have any answers. Sometimes "mu" is the answer. Sorry, no fortune this time. Better luck next cookie! Spare your scrolls of make-edible until it's really necessary! +Sticks and stones may break your bones but manes will never hurt you. Stormbringer doesn't steal souls. People steal souls. Suddenly, the dungeon will collapse... Taming a mail daemon may cause a system security violation. @@ -165,6 +166,7 @@ The longer the wand the better. The magic word is "XYZZY". The meek shall inherit your bones files. The mines are dark and deep, and I have levels to go before I sleep. +The more you use the E word, the better. The use of dynamite is dangerous. There are no worms in the UNIX version. There is a trap on this level! From 6f6f74e8d2207a1f6f8b99abbc67368545da3470 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 13 Dec 2015 21:45:08 -0500 Subject: [PATCH 07/21] slightly change quickmimic() sense wording Changes to be committed: modified: doc/fixes36.1 modified: src/dogmove.c A bug reporter wrote: > comments: > "You sense a little dog appear where Poes was!" > > seems strange to me, perhaps it should be "appearing", or the hero shouldn't > notice at all if it's out of sight. > > Not sure it was out of sight, anyway, because I saw the d from the shop > doorway. > Change the wording to: "You sense that a little dog has appeared where Poes was!" --- doc/fixes36.1 | 1 + src/dogmove.c | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index e9d8a81bf..d68a7abf2 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -26,6 +26,7 @@ wrong message given when high priest on astral plane rejects being assigned a name (got the one for unique monsters instead of the one for priests) negative intrinsic protection shouldn't confer MC=1, "you are warded" (not possible from divine protection but is possible from eating rings) +make a slight adjustment to the quickmimic() sense wording Platform- and/or Interface-Specific Fixes diff --git a/src/dogmove.c b/src/dogmove.c index 36e6c4a41..472e3e416 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 dogmove.c $NHDT-Date: 1446604109 2015/11/04 02:28:29 $ $NHDT-Branch: master $:$NHDT-Revision: 1.56 $ */ +/* NetHack 3.6 dogmove.c $NHDT-Date: 1450061092 2015/12/14 02:44:52 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.57 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1094,8 +1094,8 @@ struct monst *mtmp; (on the other hand, perhaps you're sensing a brief glimpse of its mind as it changes form) */ newsym(mtmp->mx, mtmp->my); - You("%s %s appear where %s was!", - cansee(mtmp->mx, mtmp->my) ? "see" : "sense", + You("%s %s %sappear%s where %s was!", + cansee(mtmp->mx, mtmp->my) ? "see" : "sense that", (mtmp->m_ap_type == M_AP_FURNITURE) ? an(defsyms[mtmp->mappearance].explanation) : (mtmp->m_ap_type == M_AP_OBJECT @@ -1107,6 +1107,8 @@ struct monst *mtmp; : (mtmp->m_ap_type == M_AP_MONSTER) ? an(mons[mtmp->mappearance].mname) : something, + cansee(mtmp->mx, mtmp->my) ? "" : "has ", + cansee(mtmp->mx, mtmp->my) ? "" : "ed", buf); display_nhwindow(WIN_MAP, TRUE); } From f5b5a428c1c3a12bf445fef3688614056d4aa176 Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 13 Dec 2015 19:45:20 -0800 Subject: [PATCH 08/21] fix #40171 - tribute typo for The Colour of Magic Passage 1 of the Colour of Magic: 'bazaars' was misspelled 'bazarrs'. There were a couple of other things that didn't match the paperback copy I recently recovered from loan: 'radiation' should be 'radiations', and 'dark' was omitted from 'a tall dark figure'. Unlike the later Harper editions, the early Signet ones retain British spelling (at least for 'colour'). I failed to find the second passsage via flipping through the pages, so wasn't able to proof-check that one. --- dat/tribute | 14 ++++++++------ doc/fixes36.1 | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dat/tribute b/dat/tribute index 4664c639d..0ec728092 100644 --- a/dat/tribute +++ b/dat/tribute @@ -10,17 +10,19 @@ # # %title The Colour of Magic (2) +# p. 67 (Signet edition) %passage 1 -It has been remarked before that those who are sensitive to radiation in -the far octarine - the eighth colour, the pigment of the Imagination - can +It has been remarked before that those who are sensitive to radiations in +the far octarine--the eighth colour, the pigment of the Imagination--can see things that others cannot. Thus it was that Rincewind, hurrying through the crowded, flare-lit, -evening bazarrs of Morpork with the Luggage trundling behind him, jostled a -tall figure, turned to deliver a few suitable curses, and beheld Death. +evening bazaars of Morpork with the Luggage trundling behind him, jostled +a tall dark figure, turned to deliver a few suitable curses, and beheld +Death. -It had to be Death. No-one else went around with empty eye sockets and, of -course, the scythe over one shoulder was another clue. +It had to be Death. No-one else went around with empty eye sockets and, +of course, the scythe over one shoulder was another clue. [...] [The Colour of Magic, by Terry Pratchett] %e passage 1 diff --git a/doc/fixes36.1 b/doc/fixes36.1 index d68a7abf2..b4c572fca 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -27,6 +27,7 @@ wrong message given when high priest on astral plane rejects being assigned a negative intrinsic protection shouldn't confer MC=1, "you are warded" (not possible from divine protection but is possible from eating rings) make a slight adjustment to the quickmimic() sense wording +fix typo in passage 1 of The Colour of Magic Platform- and/or Interface-Specific Fixes From c843f56897289746cb1b7c5b9a4e66878679d5fd Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 14 Dec 2015 13:27:31 -0800 Subject: [PATCH 09/21] fix #H4078 - dull spellbook vs sleep resistance Reading a dull spellbook could make a sleep resistant hero fall asleep. --- doc/fixes36.1 | 1 + src/spell.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index b4c572fca..175309436 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -28,6 +28,7 @@ negative intrinsic protection shouldn't confer MC=1, "you are warded" (not possible from divine protection but is possible from eating rings) make a slight adjustment to the quickmimic() sense wording fix typo in passage 1 of The Colour of Magic +falling asleep when reading dull spellbook ignored sleep resistance Platform- and/or Interface-Specific Fixes diff --git a/src/spell.c b/src/spell.c index 71068c7a6..bc911f3c3 100644 --- a/src/spell.c +++ b/src/spell.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 spell.c $NHDT-Date: 1447653429 2015/11/16 05:57:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.72 $ */ +/* NetHack 3.6 spell.c $NHDT-Date: 1450128440 2015/12/14 21:27:20 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.73 $ */ /* Copyright (c) M. Stephenson 1988 */ /* NetHack may be freely redistributed. See license for details. */ @@ -430,7 +430,7 @@ register struct obj *spellbook; boolean too_hard = FALSE; /* attempting to read dull book may make hero fall asleep */ - if (!confused && booktype != SPE_BLANK_PAPER + if (!confused && !Sleep_resistance && !strcmp(OBJ_DESCR(objects[booktype]), "dull")) { const char *eyes; int dullbook = rnd(25) - ACURR(A_WIS); From f3f2233122344d2498113add897a1b3a5580e791 Mon Sep 17 00:00:00 2001 From: PatR Date: Mon, 14 Dec 2015 13:51:33 -0800 Subject: [PATCH 10/21] revert doc/recover.{6,txt} to previous state When I updated recover.6 last week, I was under the mis-impression that the INSURANCE compile-time option had been made unconditional. It has not, and after undoing that, there was no substantive change, so put it back to how it was at release. --- doc/recover.6 | 25 ++++++-- doc/recover.txt | 163 +++++++++++++++++++++++++++++++----------------- 2 files changed, 127 insertions(+), 61 deletions(-) diff --git a/doc/recover.6 b/doc/recover.6 index 12ddcfc24..4d6bcb364 100644 --- a/doc/recover.6 +++ b/doc/recover.6 @@ -1,5 +1,5 @@ -.TH RECOVER 6 "7 December 2015" -.\" NetHack 3.6 recover.6 $NHDT-Date: 1449616497 2015/12/08 23:14:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.7 $ +.TH RECOVER 6 "9 January 1993" +.\" NetHack 3.6 recover.6 $NHDT-Date: 1450129883 2015/12/14 21:51:23 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.8 $ .UC 4 .SH NAME recover \- recover a NetHack game interrupted by disaster @@ -34,11 +34,26 @@ It overrides the value from NETHACKDIR, HACKDIR, or the directory specified by the game administrator during compilation (usually /usr/games/lib/nethackdir). .PP +^?ALLDOCS For recovery to be possible, -the run-time option +.I nethack +must have been compiled with the INSURANCE option, and the run-time option .I checkpoint -must have been on. -.PP +must also have been on. +^: +^?INSURANCE +For recovery to be possible, +.I nethack +must have been compiled with the INSURANCE option (this configuration was), +and the run-time option +.I checkpoint +must also have been on. +^: +This configuration of +.I nethack +was created without support for recovery. +^. +^. NetHack normally writes out files for levels as the player leaves them, so they will be ready for return visits. When checkpointing, NetHack also writes out the level entered and diff --git a/doc/recover.txt b/doc/recover.txt index 484a6fe56..80eeadb51 100644 --- a/doc/recover.txt +++ b/doc/recover.txt @@ -1,81 +1,132 @@ -RECOVER(6) RECOVER(6) + + + +RECOVER(6) 1993 RECOVER(6) NAME - recover - recover a NetHack game interrupted by disaster + recover - recover a NetHack game interrupted by disaster SYNOPSIS - recover [ -d directory ] base1 base2 ... + recover [ -d directory ] base1 base2 ... DESCRIPTION - Occasionally, a NetHack game will be interrupted by disaster when the - game or the system crashes. Prior to NetHack v3.1, these games were - lost because various information like the player's inventory was kept - only in memory. Now, all pertinent information can be written out to - disk, so such games can be recovered at the point of the last level - change. + Occasionally, a NetHack game will be interrupted by disaster + when the game or the system crashes. Prior to NetHack v3.1, + these games were lost because various information like the + player's inventory was kept only in memory. Now, all per- + tinent information can be written out to disk, so such games + can be recovered at the point of the last level change. - The base options tell recover which files to process. Each base option - specifies recovery of a separate game. + The base options tell recover which files to process. Each + base option specifies recovery of a separate game. - The -d option, which must be the first argument if it appears, supplies - a directory which is the NetHack playground. It overrides the value - from NETHACKDIR, HACKDIR, or the directory specified by the game admin- - istrator during compilation (usually /usr/games/lib/nethackdir). + The -d option, which must be the first argument if it + appears, supplies a directory which is the NetHack play- + ground. It overrides the value from NETHACKDIR, HACKDIR, or + the directory specified by the game administrator during + compilation (usually /usr/games/lib/nethackdir). - For recovery to be possible, the run-time option checkpoint must have - been on. + For recovery to be possible, nethack must have been compiled + with the INSURANCE option, and the run-time option check- + point must also have been on. NetHack normally writes out + files for levels as the player leaves them, so they will be + ready for return visits. When checkpointing, NetHack also + writes out the level entered and the current game state on + every level change. This naturally slows level changes down + somewhat. - NetHack normally writes out files for levels as the player leaves them, - so they will be ready for return visits. When checkpointing, NetHack - also writes out the level entered and the current game state on every - level change. This naturally slows level changes down somewhat. + The level file names are of the form base.nn, where nn is an + internal bookkeeping number for the level. The file base.0 + is used for game identity, locking, and, when checkpointing, + for the game state. Various OSes use different strategies + for constructing the base name. Microcomputers use the + character name, possibly truncated and modified to be a + legal filename on that system. Multi-user systems use the + (modified) character name prefixed by a user number to avoid + conflicts, or "xlock" if the number of concurrent players is + being limited. It may be necessary to look in the play- + ground to find the correct base name of the interrupted + game. recover will transform these level files into a save + file of the same name as nethack would have used. - The level file names are of the form base.nn, where nn is an internal - bookkeeping number for the level. The file base.0 is used for game - identity, locking, and, when checkpointing, for the game state. Vari- - ous OSes use different strategies for constructing the base name. - Microcomputers use the character name, possibly truncated and modified - to be a legal filename on that system. Multi-user systems use the - (modified) character name prefixed by a user number to avoid conflicts, - or "xlock" if the number of concurrent players is being limited. It - may be necessary to look in the playground to find the correct base - name of the interrupted game. recover will transform these level files - into a save file of the same name as nethack would have used. + Since recover must be able to read and delete files from the + playground and create files in the save directory, it has + interesting interactions with game security. Giving ordi- + nary players access to recover through setuid or setgid is + tantamount to leaving the playground world-writable, with + respect to both cheating and messing up other players. For - Since recover must be able to read and delete files from the playground - and create files in the save directory, it has interesting interactions - with game security. Giving ordinary players access to recover through - setuid or setgid is tantamount to leaving the playground world- - writable, with respect to both cheating and messing up other players. - For a single-user system, this of course does not change anything, so - some of the microcomputer ports install recover by default. - For a multi-user system, the game administrator may want to arrange for - all .0 files in the playground to be fed to recover when the host - machine boots, and handle game crashes individually. If the user popu- - lation is sufficiently trustworthy, recover can be installed with the - same permissions the nethack executable has. In either case, recover - is easily compiled from the distribution utility directory. + +January Last change: 9 1 + + + + + + +RECOVER(6) 1993 RECOVER(6) + + + + a single-user system, this of course does not change any- + thing, so some of the microcomputer ports install recover by + default. + + For a multi-user system, the game administrator may want to + arrange for all .0 files in the playground to be fed to + recover when the host machine boots, and handle game crashes + individually. If the user population is sufficiently + trustworthy, recover can be installed with the same permis- + sions the nethack executable has. In either case, recover + is easily compiled from the distribution utility directory. NOTES - Like nethack itself, recover will overwrite existing savefiles of the - same name. Savefiles created by recover are uncompressed; they may be - compressed afterwards if desired, but even a compression-using nethack - will find them in the uncompressed form. + Like nethack itself, recover will overwrite existing save- + files of the same name. Savefiles created by recover are + uncompressed; they may be compressed afterwards if desired, + but even a compression-using nethack will find them in the + uncompressed form. SEE ALSO - nethack(6) + nethack(6) BUGS - recover makes no attempt to find out if a base name specifies a game in - progress. If multiple machines share a playground, this would be - impossible to determine. + recover makes no attempt to find out if a base name speci- + fies a game in progress. If multiple machines share a play- + ground, this would be impossible to determine. - recover should be taught to use the nethack playground locking mecha- - nism to avoid conflicts. + recover should be taught to use the nethack playground lock- + ing mechanism to avoid conflicts. + + + + + + + + + + + + + + + + + + + + + + + + + + +January Last change: 9 2 -4th Berkeley Distribution 7 December 2015 RECOVER(6) From 3ec592e3f1cc67e5c8092ffddc746d314aab4525 Mon Sep 17 00:00:00 2001 From: PatR Date: Tue, 15 Dec 2015 03:22:39 -0800 Subject: [PATCH 11/21] fix bz60 and bz61 - meta char feedback 60: getpos() doesn't report the offending keystroke accurately when rejecting M-something as a movement keystroke while moving the cursor; 61: typing M-N as a command keystroke produces |Unknown command 'M- | '. where the '.' on the second line clobbers the top line of the map. I can't reproduce the first one without extending the altmeta hack [a run-time option to treat two char sequence ESC c as M-c] to getpos() and nh_poskey(), which I've done for testing but am not including here. I can't reproduce the second as it's described, but M-^J produces |Unknown command 'M- |'.--More-- and this fixes that, with a general fix that applies to any meta char. The diffs include some cleanup/groundwork for maybe extending altmeta. --- doc/fixes36.1 | 4 ++++ src/cmd.c | 56 +++++++++++++++++---------------------------------- src/do_name.c | 8 ++++---- src/hacklib.c | 30 +++++++++++++++------------ 4 files changed, 44 insertions(+), 54 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 175309436..f4088b147 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -29,10 +29,14 @@ negative intrinsic protection shouldn't confer MC=1, "you are warded" (not make a slight adjustment to the quickmimic() sense wording fix typo in passage 1 of The Colour of Magic falling asleep when reading dull spellbook ignored sleep resistance +getpos() complaint about invalid movement keystroke didn't describe meta-chars + accurately Platform- and/or Interface-Specific Fixes ----------------------------------------- +tty: M-N gave "Unknown command 'M-" with "'." finishing the sentence on the + line below it, leaving bogus '.' displayed on the top row of the map unix/X11: in top level Makefile, some commented out definitions of VARDATND misspelled pilemark.xbm (as pilemark.xpm) win32gui: getversionstring() was overflowing the provided Help About buffer diff --git a/src/cmd.c b/src/cmd.c index 24d68b1d9..156cf82fa 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 cmd.c $NHDT-Date: 1449736557 2015/12/10 08:35:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.208 $ */ +/* NetHack 3.6 cmd.c $NHDT-Date: 1450178549 2015/12/15 11:22:29 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.209 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -107,7 +107,7 @@ extern int NDECL(dowield); /**/ extern int NDECL(dowieldquiver); /**/ extern int NDECL(dozap); /**/ extern int NDECL(doorganize); /**/ -#endif /* DUMB */ +#endif /* DUMB */ static int NDECL(dosuspend_core); /**/ @@ -3402,15 +3402,8 @@ register char *cmd; register const struct func_tab *tlist; int res, NDECL((*func)); -#if 0 - /* obsolete - scan through the cmdlist array looking for *cmd */ - for (tlist = cmdlist; tlist->f_char; tlist++) { - if ((*cmd & 0xff) != (tlist->f_char & 0xff)) - continue; -#else /* current - use *cmd to directly index cmdlist array */ if ((tlist = Cmd.commands[*cmd & 0xff]) != 0) { -#endif if (u.uburied && !tlist->can_if_buried) { You_cant("do that while you are buried!"); res = 0; @@ -3433,23 +3426,13 @@ register char *cmd; } if (bad_command) { - char expcmd[10]; - register char c, *cp = expcmd; + char expcmd[20]; /* we expect 'cmd' to point to 1 or 2 chars */ + register char c; + + expcmd[0] = '\0'; + while ((c = *cmd++) != '\0') + Strcat(expcmd, visctrl(c)); /* add 1..4 chars plus terminator */ - while ((c = *cmd++) != '\0' - && (int) (cp - expcmd) < (int) (sizeof expcmd - 3)) { - if (c >= 040 && c < 0177) { - *cp++ = c; - } else if (c & 0200) { - *cp++ = 'M'; - *cp++ = '-'; - *cp++ = c & ~0200; - } else { - *cp++ = '^'; - *cp++ = c ^ 0100; - } - } - *cp = '\0'; if (!prefix_seen || !iflags.cmdassist || !help_dir(0, "Invalid direction key!")) Norep("Unknown command '%s'.", expcmd); @@ -3587,10 +3570,9 @@ retry: if (!index(quitchars, dirsym)) { help_requested = (dirsym == '?'); if (help_requested || iflags.cmdassist) { - did_help = - help_dir((s && *s == '^') ? dirsym : 0, - help_requested ? (const char *) 0 - : "Invalid direction key!"); + did_help = help_dir((s && *s == '^') ? dirsym : 0, + help_requested ? (const char *) 0 + : "Invalid direction key!"); if (help_requested) goto retry; } @@ -4121,14 +4103,14 @@ char def; iflags.last_msg = PLNMSG_UNKNOWN; /* most recent pline is clobbered */ /* maximum acceptable length is QBUFSZ-1 */ - if (strlen(query) < QBUFSZ) - return (*windowprocs.win_yn_function)(query, resp, def); - - /* caller shouldn't have passed anything this long */ - paniclog("Query truncated: ", query); - (void) strncpy(qbuf, query, QBUFSZ - 1 - 3); - Strcpy(&qbuf[QBUFSZ - 1 - 3], "..."); - return (*windowprocs.win_yn_function)(qbuf, resp, def); + if (strlen(query) >= QBUFSZ) { + /* caller shouldn't have passed anything this long */ + paniclog("Query truncated: ", query); + (void) strncpy(qbuf, query, QBUFSZ - 1 - 3); + Strcpy(&qbuf[QBUFSZ - 1 - 3], "..."); + query = qbuf; + } + return (*windowprocs.win_yn_function)(query, resp, def); } /* for paranoid_confirm:quit,die,attack prompting */ diff --git a/src/do_name.c b/src/do_name.c index e033e46e0..9eebe0b51 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 do_name.c $NHDT-Date: 1449982602 2015/12/13 04:56:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.79 $ */ +/* NetHack 3.6 do_name.c $NHDT-Date: 1450178550 2015/12/15 11:22:30 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.80 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -54,7 +54,7 @@ const char *goal; putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time."); putstr(tmpwin, 0, "Or enter a background symbol (ex. <)."); putstr(tmpwin, 0, "Use @ to move the cursor on yourself."); - if (getpos_hilitefunc != NULL) + if (getpos_hilitefunc) putstr(tmpwin, 0, "Use $ to display valid locations."); putstr(tmpwin, 0, "Use # to toggle automatic description."); /* disgusting hack; the alternate selection characters work for any @@ -197,7 +197,7 @@ const char *goal; /* update message window to reflect that we're still targetting */ show_goal_msg = TRUE; msg_given = TRUE; - } else if ((c == '$') && (getpos_hilitefunc != NULL)) { + } else if (c == '$' && getpos_hilitefunc) { if (!hilite_state) { (*getpos_hilitefunc)(0); (*getpos_hilitefunc)(1); @@ -307,7 +307,7 @@ const char *goal; clear_nhwindow(WIN_MESSAGE); ccp->x = cx; ccp->y = cy; - getpos_hilitefunc = NULL; + getpos_hilitefunc = (void FDECL((*), (int))) 0; return result; } diff --git a/src/hacklib.c b/src/hacklib.c index a590968d9..a8ecfaea1 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 hacklib.c $NHDT-Date: 1446336792 2015/11/01 00:13:12 $ $NHDT-Branch: master $:$NHDT-Revision: 1.44 $ */ +/* NetHack 3.6 hacklib.c $NHDT-Date: 1450178551 2015/12/15 11:22:31 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.46 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Robert Patrick Rankin, 1991 */ /* NetHack may be freely redistributed. See license for details. */ @@ -373,20 +373,24 @@ char * visctrl(c) char c; { - Static char ccc[3]; + Static char ccc[5]; + register int i = 0; - c &= 0177; - ccc[2] = '\0'; - if (c < 040) { - ccc[0] = '^'; - ccc[1] = c | 0100; /* letter */ - } else if (c == 0177) { - ccc[0] = '^'; - ccc[1] = c & ~0100; /* '?' */ - } else { - ccc[0] = c; /* printable character */ - ccc[1] = '\0'; + if ((uchar) c & 0200) { + ccc[i++] = 'M'; + ccc[i++] = '-'; } + c &= 0177; + if (c < 040) { + ccc[i++] = '^'; + ccc[i++] = c | 0100; /* letter */ + } else if (c == 0177) { + ccc[i++] = '^'; + ccc[i++] = c & ~0100; /* '?' */ + } else { + ccc[i++] = c; /* printable character */ + } + ccc[i] = '\0'; return ccc; } From d17fcf3e13ddd1c8d49232e4443934a437645d13 Mon Sep 17 00:00:00 2001 From: nhmall Date: Tue, 15 Dec 2015 08:50:39 -0500 Subject: [PATCH 12/21] document symset:default Changes to be committed: modified: doc/Guidebook.mn modified: doc/Guidebook.tex --- doc/Guidebook.mn | 7 ++++--- doc/Guidebook.tex | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 1e56a790e..0db6dc0e2 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1,11 +1,11 @@ -.\" $NHDT-Branch: master $:$NHDT-Revision: 1.188 $ $NHDT-Date: 1449420465 2015/12/06 16:47:45 $ +.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.189 $ $NHDT-Date: 1450187428 2015/12/15 13:50:28 $ .ds h0 "NetHack Guidebook .ds h1 .ds h2 % .ds vr "NetHack 3.6 .ds f0 "\*(vr .ds f1 -.ds f2 "December 7, 2015 +.ds f2 "December 15, 2015 .\" labeled paragraph start (should be part of tmac.n, but I don't want to .\" make changes to that file) .\" .PS word @@ -2456,7 +2456,8 @@ alert notification messages about feature changes for that and prior versions (ex. ``suppress_alert:3.3.1''). .lp symset This option may be used to select one of the named symbol sets found within -``symbols'' to alter the symbols displayed on the screen. +``symbols'' to alter the symbols displayed on the screen. +Use ``symset:default'' to explicitly select the default symbols. .lp "time " Show the elapsed game time in turns on bottom line (default off). Persistent. .lp timed_delay diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 1836afb68..ad025f1a7 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -45,7 +45,7 @@ %.au \author{Original version - Eric S. Raymond\\ (Edited and expanded for 3.6 by Mike Stephenson and others)} -\date{December 7, 2015} +\date{December 15, 2015} \maketitle @@ -2944,6 +2944,7 @@ and prior versions (ex.\ ``{\tt suppress\verb+_+alert:3.3.1}'') \item[\ib{symset}] This option may be used to select one of the named symbol sets found within {\tt symbols} to alter the symbols displayed on the screen. +Use ``{\tt symset:default}'' to explicitly select the default symbols. %.lp \item[\ib{time}] Show the elapsed game time in turns on bottom line (default off). Persistent. From 8f96d4b9efd7d536a84590d674f08eb5747a1bd1 Mon Sep 17 00:00:00 2001 From: PatR Date: Tue, 15 Dec 2015 17:59:42 -0800 Subject: [PATCH 13/21] fix bz157, #H4075 - 'realtime' had strange units A couple of reports asked what weird unit of measure was used for the 'realtime' value in xlogfile. It was just seconds, but was accumulating incorrectly whenever game-state got saved for the checkpoint option. Now it really is seconds, or rather whatever unit you get for the delta of two time_t values; usually seconds but not guaranteed to be that. --- doc/fixes36.1 | 1 + include/you.h | 11 ++++++----- src/allmain.c | 11 +++-------- src/end.c | 6 +++--- src/restore.c | 13 +++++-------- src/save.c | 13 ++++++++----- src/topten.c | 7 +++---- 7 files changed, 29 insertions(+), 33 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index f4088b147..8b475665a 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -31,6 +31,7 @@ fix typo in passage 1 of The Colour of Magic falling asleep when reading dull spellbook ignored sleep resistance getpos() complaint about invalid movement keystroke didn't describe meta-chars accurately +'realtime' value in xlogfile was incorrect if 'checkpoint' option was active Platform- and/or Interface-Specific Fixes diff --git a/include/you.h b/include/you.h index ef45eef46..78a3a1334 100644 --- a/include/you.h +++ b/include/you.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 you.h $NHDT-Date: 1432512782 2015/05/25 00:13:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.29 $ */ +/* NetHack 3.6 you.h $NHDT-Date: 1450231172 2015/12/16 01:59:32 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.30 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -68,10 +68,11 @@ struct u_achieve { }; struct u_realtime { - long - realtime; /* actual playing time up until the last restore, seconds */ - time_t restored; /* time the game was started or restored */ - time_t endtime; + long realtime; /* accumulated playing time in seconds */ + time_t start_timing; /* time game was started or restored or 'realtime' + was last updated (savegamestate for checkpoint) */ + time_t finish_time; /* end of 'realtime' interval: time of save or + end of game; used for topten/logfile/xlogfile */ }; /* KMH, conduct -- diff --git a/src/allmain.c b/src/allmain.c index 962df4c68..02fa6480f 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 allmain.c $NHDT-Date: 1446975459 2015/11/08 09:37:39 $ $NHDT-Branch: master $:$NHDT-Revision: 1.66 $ */ +/* NetHack 3.6 allmain.c $NHDT-Date: 1450231173 2015/12/16 01:59:33 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.67 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -587,18 +587,13 @@ newgame() com_pager(1); } + urealtime.realtime = 0L; + urealtime.start_timing = getnow(); #ifdef INSURANCE save_currentstate(); #endif program_state.something_worth_saving++; /* useful data now exists */ - urealtime.realtime = 0L; -#if defined(BSD) && !defined(POSIX_TYPES) - (void) time((long *) &urealtime.restored); -#else - (void) time(&urealtime.restored); -#endif - /* Success! */ welcome(TRUE); return; diff --git a/src/end.c b/src/end.c index e245e30e4..20ca00d09 100644 --- a/src/end.c +++ b/src/end.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 end.c $NHDT-Date: 1448241780 2015/11/23 01:23:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.108 $ */ +/* NetHack 3.6 end.c $NHDT-Date: 1450231174 2015/12/16 01:59:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.110 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -951,8 +951,8 @@ int how; /* remember time of death here instead of having bones, rip, and topten figure it out separately and possibly getting different time or even day if player is slow responding to --More-- */ - endtime = getnow(); - urealtime.realtime += (long) (endtime - urealtime.restored); + urealtime.finish_time = endtime = getnow(); + urealtime.realtime += (long) (endtime - urealtime.start_timing); /* Sometimes you die on the first move. Life's not fair. * On those rare occasions you get hosed immediately, go out diff --git a/src/restore.c b/src/restore.c index 99c5ad61f..d56af4ea6 100644 --- a/src/restore.c +++ b/src/restore.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 restore.c $NHDT-Date: 1446892455 2015/11/07 10:34:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.101 $ */ +/* NetHack 3.6 restore.c $NHDT-Date: 1450231174 2015/12/16 01:59:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.102 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -568,13 +568,10 @@ unsigned int *stuckid, *steedid; foo = time_from_yyyymmddhhmmss(timebuf); ReadTimebuf(ubirthday); - mread(fd, &urealtime.realtime, sizeof(urealtime.realtime)); - ReadTimebuf(urealtime.restored); -#if defined(BSD) && !defined(POSIX_TYPES) - (void) time((long *) &urealtime.restored); -#else - (void) time(&urealtime.restored); -#endif + mread(fd, &urealtime.realtime, sizeof urealtime.realtime); + ReadTimebuf(urealtime.start_timing); /** [not used] **/ + /* current time is the time to use for next urealtime.realtime update */ + urealtime.start_timing = getnow(); set_uasmon(); #ifdef CLIPPING diff --git a/src/save.c b/src/save.c index 2fc087209..f1e4ecf7b 100644 --- a/src/save.c +++ b/src/save.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 save.c $NHDT-Date: 1448241784 2015/11/23 01:23:04 $ $NHDT-Branch: master $:$NHDT-Revision: 1.95 $ */ +/* NetHack 3.6 save.c $NHDT-Date: 1450231175 2015/12/16 01:59:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.98 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -289,12 +289,15 @@ register int fd, mode; #ifdef SYSFLAGS bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag)); #endif - urealtime.realtime += (long) (getnow() - urealtime.restored); + urealtime.finish_time = getnow(); + urealtime.realtime += (long) (urealtime.finish_time + - urealtime.start_timing); bwrite(fd, (genericptr_t) &u, sizeof(struct you)); bwrite(fd, yyyymmddhhmmss(ubirthday), 14); - bwrite(fd, (genericptr_t) &urealtime.realtime, - sizeof(urealtime.realtime)); - bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14); + bwrite(fd, (genericptr_t) &urealtime.realtime, sizeof urealtime.realtime); + bwrite(fd, yyyymmddhhmmss(urealtime.start_timing), 14); /** Why? **/ + /* this is the value to use for the next update of urealtime.realtime */ + urealtime.start_timing = urealtime.finish_time; save_killers(fd, mode); /* must come before migrating_objs and migrating_mons are freed */ diff --git a/src/topten.c b/src/topten.c index 7ea996da3..375eb1d23 100644 --- a/src/topten.c +++ b/src/topten.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 topten.c $NHDT-Date: 1448117546 2015/11/21 14:52:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */ +/* NetHack 3.6 topten.c $NHDT-Date: 1450231176 2015/12/16 01:59:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.41 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -330,8 +330,8 @@ struct toptenentry *tt; Fprintf(rfile, "%cconduct=0x%lx%cturns=%ld%cachieve=0x%lx", XLOG_SEP, encodeconduct(), XLOG_SEP, moves, XLOG_SEP, encodeachieve()); Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld", XLOG_SEP, - (long) urealtime.realtime, XLOG_SEP, (long) ubirthday, XLOG_SEP, - (long) urealtime.endtime); + (long) urealtime.realtime, XLOG_SEP, + (long) ubirthday, XLOG_SEP, (long) urealtime.finish_time); Fprintf(rfile, "%cgender0=%s%calign0=%s", XLOG_SEP, genders[flags.initgend].filecode, XLOG_SEP, aligns[1 - u.ualignbase[A_ORIGINAL]].filecode); @@ -516,7 +516,6 @@ time_t when; t0->birthdate = yyyymmdd(ubirthday); t0->deathdate = yyyymmdd(when); t0->tt_next = 0; - urealtime.endtime = when; #ifdef UPDATE_RECORD_IN_PLACE t0->fpos = -1L; #endif From af6887796f79e83d642e9a4b18bb2a6a3264d4e3 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 16 Dec 2015 02:23:32 -0800 Subject: [PATCH 14/21] scrolls written while blind; scrolls of mail Make a fix suggested during beta testing: you can read scrolls while blind if you know the label, and you can write a scroll with a magic marker while blind, but the result was flagged as description unknown so you couldn't read the newly written scroll until regaining sight or obtaining object identification. So change writing a previously discovered scroll while blind to set dknown since a successful write always yields the type of scroll requested. Getting lucky while attempting to write an undiscovered scroll--which has to be done by scroll's type name (for instance "food detection") rather than by its label ("YUM YUM")--still leaves the description flagged as unknown since hero hasn't seen the what sort of label the new scroll has. Along the way I got side-tracked by the possibilty of writing a scroll of mail. It's allowed and yielded the same result as finding such a scroll in bones, or wishing for one: when read, it was junk mail from Larn. Make one written via marker give different feedback since it comes from creation of a stamped scroll without any stamps available. Also, suppress an "argument not used" warning for readmail(). --- doc/fixes36.1 | 3 +++ src/bones.c | 15 +++++++++------ src/mail.c | 45 +++++++++++++++++++++++---------------------- src/objnam.c | 4 +++- src/read.c | 14 +++++++++----- src/write.c | 21 +++++++++++++++------ 6 files changed, 62 insertions(+), 40 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 8b475665a..8be5a603c 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -32,6 +32,8 @@ falling asleep when reading dull spellbook ignored sleep resistance getpos() complaint about invalid movement keystroke didn't describe meta-chars accurately 'realtime' value in xlogfile was incorrect if 'checkpoint' option was active +make a previously-discovered scroll written with marker while blind have its + label known so it can be read while blind Platform- and/or Interface-Specific Fixes @@ -51,6 +53,7 @@ X11: core bug for '`' (backtick) command was only noticed by X11 interface, General New Features -------------------- naming Sting or Orcrist now breaks illiterate conduct +different feedback for reading a scroll of mail created by writing with marker Platform- and/or Interface-Specific New Features diff --git a/src/bones.c b/src/bones.c index 7ca192599..423d3e3d0 100644 --- a/src/bones.c +++ b/src/bones.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 bones.c $NHDT-Date: 1449269914 2015/12/04 22:58:34 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.66 $ */ +/* NetHack 3.6 bones.c $NHDT-Date: 1450261363 2015/12/16 10:22:43 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.67 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */ /* NetHack may be freely redistributed. See license for details. */ @@ -118,15 +118,18 @@ boolean restore; free_oname(otmp); } - if (otmp->otyp == SLIME_MOLD) + if (otmp->otyp == SLIME_MOLD) { goodfruit(otmp->spe); #ifdef MAIL - else if (otmp->otyp == SCR_MAIL) - otmp->spe = 1; + } else if (otmp->otyp == SCR_MAIL) { + /* 0: delivered in-game via external event; + 1: from bones or wishing; 2: written with marker */ + if (otmp->spe == 0) + otmp->spe = 1; #endif - else if (otmp->otyp == EGG) + } else if (otmp->otyp == EGG) { otmp->spe = 0; - else if (otmp->otyp == TIN) { + } else if (otmp->otyp == TIN) { /* make tins of unique monster's meat be empty */ if (otmp->corpsenm >= LOW_PM && unique_corpstat(&mons[otmp->corpsenm])) diff --git a/src/mail.c b/src/mail.c index 0a38f148b..fb9c07c50 100644 --- a/src/mail.c +++ b/src/mail.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mail.c $NHDT-Date: 1436754892 2015/07/13 02:34:52 $ $NHDT-Branch: master $:$NHDT-Revision: 1.20 $ */ +/* NetHack 3.6 mail.c $NHDT-Date: 1450261364 2015/12/16 10:22:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -11,25 +11,24 @@ * Notify user when new mail has arrived. Idea by Merlyn Leroy. * * The mail daemon can move with less than usual restraint. It can: - * - move diagonally from a door - * - use secret and closed doors - * - run through a monster ("Gangway!", etc.) - * - run over pools & traps + * - move diagonally from a door + * - use secret and closed doors + * - run through a monster ("Gangway!", etc.) + * - run over pools & traps * * Possible extensions: - * - Open the file MAIL and do fstat instead of stat for efficiency. - * (But sh uses stat, so this cannot be too bad.) - * - Examine the mail and produce a scroll of mail named "From somebody". - * - Invoke MAILREADER in such a way that only this single letter is - *read. - * - Do something to the text when the scroll is enchanted or cancelled. - * - Make the daemon always appear at a stairwell, and have it find a - * path to the hero. + * - Open the file MAIL and do fstat instead of stat for efficiency. + * (But sh uses stat, so this cannot be too bad.) + * - Examine the mail and produce a scroll of mail named "From somebody". + * - Invoke MAILREADER in such a way that only this single mail is read. + * - Do something to the text when the scroll is enchanted or cancelled. + * - Make the daemon always appear at a stairwell, and have it find a + * path to the hero. * * Note by Olaf Seibert: On the Amiga, we usually don't get mail. So we go - * through most of the effects at 'random' moments. + * through most of the effects at 'random' moments. * Note by Paul Winner: The MSDOS port also 'fakes' the mail daemon at - * random intervals. + * random intervals. */ STATIC_DCL boolean FDECL(md_start, (coord *)); @@ -418,9 +417,9 @@ ckmailstatus() return; } if (--mustgetmail <= 0) { - static struct mail_info deliver = { MSG_MAIL, - "I have some mail for you", 0, - 0 }; + static struct mail_info deliver = { + MSG_MAIL, "I have some mail for you", 0, 0 + }; newmail(&deliver); mustgetmail = -1; } @@ -429,7 +428,7 @@ ckmailstatus() /*ARGSUSED*/ void readmail(otmp) -struct obj *otmp; +struct obj *otmp UNUSED; { static char *junk[] = { NULL, /* placeholder for "Report bugs to .", */ @@ -502,7 +501,7 @@ ckmailstatus() /*ARGSUSED*/ void readmail(otmp) -struct obj *otmp; +struct obj *otmp UNUSED; { #ifdef DEF_MAILREADER /* This implies that UNIX is defined */ register const char *mr = 0; @@ -518,8 +517,8 @@ struct obj *otmp; #else #ifndef AMS /* AMS mailboxes are directories */ display_file(mailbox, TRUE); -#endif /* AMS */ -#endif /* DEF_MAILREADER */ +#endif /* AMS */ +#endif /* DEF_MAILREADER */ /* get new stat; not entirely correct: there is a small time window where we do not see new mail */ @@ -585,6 +584,8 @@ struct obj *otmp; vms_doshell(cmd, TRUE); (void) sleep(1); } +#else + nhUse(otmp); #endif /* SHELL */ } diff --git a/src/objnam.c b/src/objnam.c index 7e3f6aea1..000595e7b 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 objnam.c $NHDT-Date: 1449975408 2015/12/13 02:56:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.156 $ */ +/* NetHack 3.6 objnam.c $NHDT-Date: 1450261364 2015/12/16 10:22:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.157 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3345,6 +3345,8 @@ typfnd: break; #ifdef MAIL case SCR_MAIL: + /* 0: delivered in-game via external event (or randomly for fake mail); + 1: from bones or wishing; 2: written with marker */ otmp->spe = 1; break; #endif diff --git a/src/read.c b/src/read.c index 617bb0dd9..948156dc7 100644 --- a/src/read.c +++ b/src/read.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 read.c $NHDT-Date: 1449972474 2015/12/13 02:07:54 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.127 $ */ +/* NetHack 3.6 read.c $NHDT-Date: 1450261365 2015/12/16 10:22:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.128 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -970,12 +970,16 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ #ifdef MAIL case SCR_MAIL: known = TRUE; - if (sobj->spe) + if (sobj->spe == 2) + /* "stamped scroll" created via magic marker--without a stamp */ + pline("This scroll is marked \"postage due\"."); + else if (sobj->spe) + /* scroll of mail obtained from bones file or from wishing; + * note to the puzzled: the game Larn actually sends you junk + * mail if you win! + */ pline( "This seems to be junk mail addressed to the finder of the Eye of Larn."); - /* note to the puzzled: the game Larn actually sends you junk - * mail if you win! - */ else readmail(sobj); break; diff --git a/src/write.c b/src/write.c index 1000b29c7..14db75706 100644 --- a/src/write.c +++ b/src/write.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 write.c $NHDT-Date: 1446078770 2015/10/29 00:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */ +/* NetHack 3.6 write.c $NHDT-Date: 1450261366 2015/12/16 10:22:46 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.17 $ */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" @@ -58,7 +58,7 @@ register struct obj *otmp; } /* decide whether the hero knowns a particular scroll's label; - unfortunately, we can't track things are haven't been added to + unfortunately, we can't track things that haven't been added to the discoveries list and aren't present in current inventory, so some scrolls with ought to yield True will end up False */ STATIC_OVL boolean @@ -335,11 +335,20 @@ found: new_obj->cursed = (curseval < 0); #ifdef MAIL if (new_obj->otyp == SCR_MAIL) - new_obj->spe = 1; + /* 0: delivered in-game via external event (or randomly for fake mail); + 1: from bones or wishing; 2: written with marker */ + new_obj->spe = 2; #endif - new_obj = - hold_another_object(new_obj, "Oops! %s out of your grasp!", - The(aobjnam(new_obj, "slip")), (const char *) 0); + /* unlike alchemy, for example, a successful result yields the + specifically chosen item so hero recognizes it even if blind; + the exception is for being lucky writing an undiscovered scroll, + where the label associated with the type-name isn't known yet */ + new_obj->dknown = label_known(new_obj->otyp, invent) ? 1 : 0; + + new_obj = hold_another_object(new_obj, "Oops! %s out of your grasp!", + The(aobjnam(new_obj, "slip")), + (const char *) 0); + nhUse(new_obj); /* try to avoid complaint about dead assignment */ return 1; } From 929be769ecc1a8cef4b6fdc3d33778ba8226fa08 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Wed, 16 Dec 2015 21:42:37 +0200 Subject: [PATCH 15/21] Add option to have autodescribe on by default --- dat/opthelp | 1 + doc/Guidebook.mn | 3 +++ doc/Guidebook.tex | 4 ++++ include/flag.h | 1 + src/do_name.c | 11 +++++------ src/options.c | 1 + 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/dat/opthelp b/dat/opthelp index cffc7b12e..aae263a39 100644 --- a/dat/opthelp +++ b/dat/opthelp @@ -2,6 +2,7 @@ Boolean options not under specific compile flags (with default values in []): (You can learn which options exist in your version by checking your current option setting, which is reached via the 'O' cmd.) +autodescribe describe the terrain under cursor [FALSE] autodig dig if moving and wielding digging tool [FALSE] autoopen walking into a door attempts to open it [TRUE] autopickup automatically pick up objects you move over [TRUE] diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 0db6dc0e2..f5b4d48c9 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1970,6 +1970,9 @@ The default is to randomly pick an appropriate alignment. If you prefix a `!' or ``no'' to the value, you can exclude that alignment from being picked randomly. Cannot be set with the `O' command. Persistent. +.lp autodescribe +Automatically describe the terrain under cursor when asked to get a location +on the map. .lp autodig Automatically dig if you are wielding a digging tool and moving into a place that can be dug (default false). Persistent. diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index ad025f1a7..bd9ba3f6b 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -2377,6 +2377,10 @@ If you prefix `{\tt !}' or ``{\tt no}'' to the value, you can exclude that alignment from being picked randomly. Cannot be set with the `{\tt O}' command. Persistent. %.lp +\item[\ib{autodescribe}] +Automatically describe the terrain under cursor when asked to get a location +on the map. +%.lp \item[\ib{autodig}] Automatically dig if you are wielding a digging tool and moving into a place that can be dug (default false). Persistent. diff --git a/include/flag.h b/include/flag.h index b39a1f064..e8d696662 100644 --- a/include/flag.h +++ b/include/flag.h @@ -212,6 +212,7 @@ struct instance_flags { boolean use_status_hilites; /* use color in status line */ boolean use_background_glyph; /* use background glyph when appropriate */ boolean hilite_pile; /* mark piles of objects with a hilite */ + boolean autodescribe; /* autodescribe mode in getpos() */ #if 0 boolean DECgraphics; /* use DEC VT-xxx extended character set */ boolean IBMgraphics; /* use IBM extended character set */ diff --git a/src/do_name.c b/src/do_name.c index 9eebe0b51..3d8669be0 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -80,7 +80,6 @@ const char *goal; int cx, cy, i, c; int sidx, tx, ty; boolean msg_given = TRUE; /* clear message window by default */ - boolean auto_msg = FALSE; boolean show_goal_msg = FALSE; static const char pick_chars[] = ".,;:"; const char *cp; @@ -108,7 +107,7 @@ const char *goal; curs(WIN_MAP, cx, cy); flush_screen(0); show_goal_msg = FALSE; - } else if (auto_msg && !msg_given && !hilite_state) { + } else if (iflags.autodescribe && !msg_given && !hilite_state) { coord cc; int sym = 0; char tmpbuf[BUFSZ]; @@ -132,7 +131,7 @@ const char *goal; flush_screen(0); } - if (auto_msg) + if (iflags.autodescribe) msg_given = FALSE; if (c == '\033') { @@ -205,11 +204,11 @@ const char *goal; } goto nxtc; } else if (c == '#') { - auto_msg = !auto_msg; + iflags.autodescribe = !iflags.autodescribe; pline("Automatic description %sis %s.", flags.verbose ? "of features under cursor " : "", - auto_msg ? "on" : "off"); - if (!auto_msg) + iflags.autodescribe ? "on" : "off"); + if (!iflags.autodescribe) show_goal_msg = TRUE; msg_given = TRUE; goto nxtc; diff --git a/src/options.c b/src/options.c index e48194503..d978ad033 100644 --- a/src/options.c +++ b/src/options.c @@ -75,6 +75,7 @@ static struct Bool_Opt { #else { "asksavedisk", (boolean *) 0, FALSE, SET_IN_FILE }, #endif + { "autodescribe", &iflags.autodescribe, FALSE, SET_IN_GAME }, { "autodig", &flags.autodig, FALSE, SET_IN_GAME }, { "autoopen", &flags.autoopen, TRUE, SET_IN_GAME }, { "autopickup", &flags.pickup, TRUE, SET_IN_GAME }, From fa092f5fe90a1b891d673c3324e2c789c53fec79 Mon Sep 17 00:00:00 2001 From: nhmall Date: Wed, 16 Dec 2015 17:52:34 -0500 Subject: [PATCH 16/21] housekeeping for 3.6.1 Changes to be committed: modified: Files modified: README modified: dat/history modified: doc/Guidebook.mn modified: doc/Guidebook.tex modified: include/global.h modified: include/obj.h modified: include/patchlevel.h modified: src/invent.c modified: src/objnam.c modified: src/shknam.c modified: src/sounds.c modified: src/spell.c modified: sys/winnt/Install.nt modified: sys/winnt/nethack.def modified: win/macosx/NetHackGuidebook.applescript modified: win/macosx/NetHackTerm.applescript modified: win/win32/mswproc.c --- Files | 28 ++++++++++++------------- README | 6 +++--- dat/history | 19 ++++++++++------- doc/Guidebook.mn | 17 ++++++++++----- doc/Guidebook.tex | 20 ++++++++++++------ include/global.h | 6 +++--- include/obj.h | 4 ++-- include/patchlevel.h | 15 ++++++++----- src/invent.c | 4 ++-- src/objnam.c | 4 ++-- src/shknam.c | 4 ++-- src/sounds.c | 4 ++-- src/spell.c | 4 ++-- sys/winnt/Install.nt | 10 ++++----- sys/winnt/nethack.def | 2 +- win/macosx/NetHackGuidebook.applescript | 2 +- win/macosx/NetHackTerm.applescript | 2 +- win/win32/mswproc.c | 4 ++-- 18 files changed, 90 insertions(+), 65 deletions(-) diff --git a/Files b/Files index f8c169b12..560f2abcc 100644 --- a/Files +++ b/Files @@ -86,7 +86,7 @@ wield.c windows.c wizard.c worm.c worn.c write.c zap.c sys/amiga: -(files for Amiga versions - untested for 3.6.0) +(files for Amiga versions - untested for 3.6.1) Build.ami Install.ami Makefile.agc Makefile.ami NetHack.cnf amidos.c amidos.p amifont.uu amifont8.uu amigst.c amii.hlp amimenu.c amirip.c amisnd.c amistack.c @@ -97,12 +97,12 @@ winfuncs.c winkey.c winmenu.c winproto.h winreq.c winstr.c xpm2iff.c sys/atari: -(files for Atari version - untested for 3.6.0) +(files for Atari version - untested for 3.6.1) Install.tos atarifnt.uue nethack.mnu setup.g tos.c unx2atar.sed sys/be: -(files for BeOS version - untested for 3.6.0) +(files for BeOS version - untested for 3.6.1) README bemain.c sys/mac: @@ -115,7 +115,7 @@ macwin.c mgetline.c mmodal.c mrecover.c mrecover.hqx mttymain.c sys/msdos: -(files for MSDOS version - untested for 3.6.0) +(files for MSDOS version - untested for 3.6.1) Install.dos Makefile.BC Makefile.GCC Makefile.MSC moveinit.pat msdos.c msdoshlp.txt ovlinit.c pckeys.c pctiles.c pctiles.h pcvideo.h portio.h schema1.BC schema2.BC @@ -125,17 +125,17 @@ video.c vidtxt.c vidvga.c nhico.uu nhpif.uu sys/os2: -(files for OS/2 version - untested for 3.6.0) +(files for OS/2 version - untested for 3.6.1) Install.os2 Makefile.os2 nhpmico.uu os2.c sys/share: -(files for MSDOS and OS/2 versions - untested for 3.6.0) +(files for MSDOS and OS/2 versions - untested for 3.6.1) Makefile.lib termcap.uu -(file for MSDOS, OS/2, NT, Amiga, and Atari versions - untested for 3.6.0) +(file for MSDOS, OS/2, NT, Amiga, and Atari versions - untested for 3.6.1) pcmain.c -(files for MSDOS, OS/2, NT, and Atari versions - untested for 3.6.0) +(files for MSDOS, OS/2, NT, and Atari versions - untested for 3.6.1) pcsys.c pcunix.c -(file for MSDOS, OS/2, and Atari versions - untested for 3.6.0) +(file for MSDOS, OS/2, and Atari versions - untested for 3.6.1) NetHack.cnf pctty.c (files for UNIX and Be versions) ioctl.c unixtty.c @@ -189,7 +189,7 @@ spec_lev.com sysconf vmsbuild.com vmsfiles.c vmsmail.c vmsmain.c vmsmisc.c vmstty.c vmsunix.c sys/wince: -(files for Windows CE and PocketPC - untested for 3.6.0) +(files for Windows CE and PocketPC - untested for 3.6.1) Install.ce bootstrp.mak celib.c cesetup.bat cesound.c defaults.nh keypad.uu menubar.uu mhaskyn.c mhaskyn.h mhcmd.c mhcmd.h mhcolor.c mhcolor.h mhdlg.c @@ -202,11 +202,11 @@ resource.h winMS.h winhack.c winhack.rc winhcksp.rc winmain.c sys/wince/ceinc: -(header files for Windows CE and PocketPC - untested for 3.6.0) +(header files for Windows CE and PocketPC - untested for 3.6.1) assert.h errno.h fcntl.h sys/wince/ceinc/sys: -(sys/stat.h for Windows CE and PocketPC - untested for 3.6.0) +(sys/stat.h for Windows CE and PocketPC - untested for 3.6.1) stat.h sys/winnt: @@ -242,13 +242,13 @@ win/chain: wc_chainin.c wc_chainout.c wc_trace.c win/gem: -(files for GEM versions - untested for 3.6.0) +(files for GEM versions - untested for 3.6.1) Install.gem bitmfile.c gem_rsc.uu gem_rso.uu gr_rect.c gr_rect.h load_img.c tile2img.c title.uu wingem.c wingem1.c xpm2img.c win/gnome: -(files for GNOME versions - untested for 3.6.0) +(files for GNOME versions - untested for 3.6.1) README gn_xpms.h gnaskstr.c gnaskstr.h gnbind.c gnbind.h gnglyph.c gnglyph.h gnmain.c gnmain.h gnmap.c gnmap.h gnmenu.c gnmenu.h gnmesg.c diff --git a/README b/README index 8013ec6f2..174b4984a 100644 --- a/README +++ b/README @@ -1,13 +1,13 @@ - NetHack 3.6.0 -- General information + NetHack 3.6.1 -- General information NetHack 3.6 is an enhancement to the dungeon exploration game NetHack. It is a distant descendent of Rogue and Hack, and a direct descendent of NetHack 3.4. In order to avoid confusion with interim development code that was posted online in 2014 by others, there is no NetHack 3.5 release. -NetHack 3.6.0 contains some code reorganization, new features, and bugfixes. +NetHack 3.6.1 contains several dozen bugfixes. -The file doc/fixes36.0 in the source distribution has a full list of each. +The file doc/fixes36.1 in the source distribution has a full list of each. The text in there was written for the development team's own use and is provided "as is", so please do not ask us to further explain the entries in that file. Some entries might be considered "spoilers", particularly diff --git a/dat/history b/dat/history index fe8bee20c..e5c206cc7 100644 --- a/dat/history +++ b/dat/history @@ -184,25 +184,30 @@ with some of the beloved community patches. Many bugs were fixed and some code was restructured. The development team, as well as Steve VanDevender and Kevin Smolkowski -ensured that NetHack 3.6.0 continued to operate on various Unix flavors +ensured that NetHack 3.6 continued to operate on various Unix flavors as well as maintaining the X11 interface. Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port -of NetHack 3.6.0 for Mac. +of NetHack 3.6 for Mac. Michael Allison, Derek S. Ray, Yitzhak Sapir, Alex Kompel, Dion Nicolaas, -and David Cohrs maintained the port of NetHack 3.6.0 for Microsoft Windows. +and David Cohrs maintained the port of NetHack 3.6 for Microsoft Windows. -Pat Rankin attempted to keep the VMS port running for NetHack 3.6.0, +Pat Rankin attempted to keep the VMS port running for NetHack 3.6, hindered by limited access. Kevin Smolkowski has updated and tested it for the most recent version of OpenVMS (V8.4 as of this writing) on Alpha and Integrity (aka Itanium aka IA64) but not VAX. -This version of the game is special in a particular way. Near the end of -the development of 3.6, one of the significant inspirations for many of +The 3.6 version of the game is special in a particular way. Near the end of +the development of 3.6.0, one of the significant inspirations for many of the humorous and fun features found in the game, author Terry Pratchett, -passed away. This version of the game includes a tribute to him. +passed away. The 3.6 version of the game includes a tribute to him. +The 3.6 development team consisting of Michael Allison, Warwick Allison, +Ken Arromdee, David Cohrs, Jessie Collet, Sean Hunt, Pasi Kallinen, +Ken Lorber, Dean Luick, Pat Rankin, Derek Ray, Mike Stephenson, +Janet Walz, and Paul Winner released 3.6.1 as a bug fix release in +January 2016. An official NetHack web site continues to be maintained by Ken Lorber at http://www.nethack.org/. diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index f5b4d48c9..c6461cb8e 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1,11 +1,11 @@ -.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.189 $ $NHDT-Date: 1450187428 2015/12/15 13:50:28 $ +.\" $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.191 $ $NHDT-Date: 1450306152 2015/12/16 22:49:12 $ .ds h0 "NetHack Guidebook .ds h1 .ds h2 % .ds vr "NetHack 3.6 .ds f0 "\*(vr .ds f1 -.ds f2 "December 15, 2015 +.ds f2 "December 16, 2015 .\" labeled paragraph start (should be part of tmac.n, but I don't want to .\" make changes to that file) .\" .PS word @@ -3485,15 +3485,22 @@ with some of the beloved community patches. Many bugs were fixed and a large amount of code was restructured. .pg \fBThe development team, as well as \fBSteve VanDevender\fP and -\fBKevin Smolkowski\fP ensured that NetHack 3.6.0 continued to operate on +\fBKevin Smolkowski\fP ensured that NetHack 3.6 continued to operate on various Unix flavors and maintained the X11 interface. .pg \fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP -maintained the port of NetHack 3.6.0 for Mac. +maintained the port of NetHack 3.6 for Mac. .pg \fBMichael Allison\fP, \fBDerek S. Ray\fP, \fBYitzhak Sapir\fP, \fBAlex Kompel\fP, and \fBDion Nicolaas\fP maintained the port of -NetHack 3.6.0 for Microsoft Windows. +NetHack 3.6 for Microsoft Windows. +.pg +The 3.6 development team consisting of +\fBMichael Allison\fP, \fBWarwick Allison\fP, \fBKen Arromdee\fP, +\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSean Hunt\fP, +\fBPasi Kallinen\fP, \fBKen Lorber\fP, \fBDean Luick\fP, \fBPat Rankin\fP, +\fBMike Stephenson\fP, \fBDerek S. Ray\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP +released 3.6.1 as a bug fix release in January 2016. .pg The official NetHack web site is maintained by \fBKen Lorber\fP at http://www.nethack.org/. .pg diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index bd9ba3f6b..18af23511 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -1,5 +1,5 @@ \documentstyle[titlepage,longtable]{article} -% NetHack 3.6 Guidebook.tex $NHDT-Date: 1431192762 2015/05/09 17:32:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.60 $ */ +% NetHack 3.6 Guidebook.tex $NHDT-Date: 1431192762 2015/12/16 17:32:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.60 $ */ %+% we're still limping along in LaTeX 2.09 compatibility mode %-%\documentclass{article} %-%\usepackage{hyperref} % before longtable @@ -45,7 +45,7 @@ %.au \author{Original version - Eric S. Raymond\\ (Edited and expanded for 3.6 by Mike Stephenson and others)} -\date{December 15, 2015} +\date{December 16, 2015} \maketitle @@ -4185,22 +4185,30 @@ version merges work done by the development team since the previous release with some of the beloved community patches. Many bugs were fixed and a large amount of code was restructured. - %.pg \medskip The development team, as well as {\it Steve VanDevender} and -{\it Kevin Smolkowski} ensured that NetHack 3.6.0 continued to operate on +{\it Kevin Smolkowski} ensured that NetHack 3.6 continued to operate on various Unix flavors and maintained the X11 interface. %.pg {\it Ken Lorber}, {\it Haoyang Wang}, {\it Pat Rankin}, and {\it Dean Luick} -maintained the port of NetHack 3.6.0 for Mac. +maintained the port of NetHack 3.6 for Mac. %.pg \medskip {\it Michael Allison}, {\it Derek S. Ray}, {\it Yitzhak Sapir}, {\it Alex Kompel}, and {\it Dion Nicolaas} maintained the port of -NetHack 3.6.0 for Microsoft Windows. +NetHack 3.6 for Microsoft Windows. + +%.pg +\medskip +The 3.6 development team consisting of +{\it Michael Allison}, {\it Warwick Allison}, {\it Ken Arromdee}, +{\it David Cohrs}, {\it Jessie Collet}, {\it Sean Hunt}, +{\it Pasi Kallinen}, {\it Ken Lorber}, {\it Dean Luick}, {\it Pat Rankin}, +{\it Mike Stephenson}, {\it Derek S. Ray}, {\it Janet Walz}, and {\it Paul Winner} +released 3.6.1 as a bug fix release in January 2016. %.pg \medskip diff --git a/include/global.h b/include/global.h index b7a61bd16..2674c92b7 100644 --- a/include/global.h +++ b/include/global.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 global.h $NHDT-Date: 1449116298 2015/12/03 04:18:18 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.46 $ */ +/* NetHack 3.6 global.h $NHDT-Date: 1450306170 2015/12/16 22:49:30 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.47 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -7,9 +7,9 @@ #include -/* #define BETA */ /* development or beta testing [MRS] */ +#define BETA /* development or beta testing [MRS] */ -/* #define DEBUG */ +#define DEBUG /* * Files expected to exist in the playground directory. diff --git a/include/obj.h b/include/obj.h index 487907cc5..eacbd42d3 100644 --- a/include/obj.h +++ b/include/obj.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 obj.h $NHDT-Date: 1445126423 2015/10/18 00:00:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.50 $ */ +/* NetHack 3.6 obj.h $NHDT-Date: 1450306176 2015/12/16 22:49:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.51 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -111,7 +111,7 @@ struct obj { int corpsenm; /* type of corpse is mons[corpsenm] */ #define leashmon corpsenm /* gets m_id of attached pet */ #define fromsink corpsenm /* a potion from a sink */ -#define novelidx corpsenm /* 3.6.0 tribute - the index of the novel title */ +#define novelidx corpsenm /* 3.6 tribute - the index of the novel title */ #define record_achieve_special corpsenm int usecount; /* overloaded for various things that tally */ #define spestudied usecount /* # of times a spellbook has been studied */ diff --git a/include/patchlevel.h b/include/patchlevel.h index 64cc5e4a4..db29d49f5 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -1,19 +1,19 @@ -/* NetHack 3.6 patchlevel.h $NHDT-Date: 1447755971 2015/11/17 10:26:11 $ $NHDT-Branch: master $:$NHDT-Revision: 1.112 $ */ +/* NetHack 3.6 patchlevel.h $NHDT-Date: 1450306182 2015/12/16 22:49:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.114 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ -/* NetHack 3.6.0 */ +/* NetHack 3.6.1 */ #define VERSION_MAJOR 3 #define VERSION_MINOR 6 /* * PATCHLEVEL is updated for each release. */ -#define PATCHLEVEL 0 +#define PATCHLEVEL 1 /* * Incrementing EDITLEVEL can be used to force invalidation of old bones * and save files. */ -#define EDITLEVEL 2 +#define EDITLEVEL 0 #define COPYRIGHT_BANNER_A "NetHack, Copyright 1985-2015" #define COPYRIGHT_BANNER_B \ @@ -30,11 +30,16 @@ * PP = patch level, ee = edit level, L = literal suffix "L", * with all four numbers specified as two hexadecimal digits. */ -/* #define VERSION_COMPATIBILITY 0x03050000L */ +#define VERSION_COMPATIBILITY 0x03060000L /****************************************************************************/ /* Version 3.6.x */ +/* Patch 1, [insert date here] + * A couple of dozen bug fixes. + * + */ + /* * NetHack 3.6.0, December 7, 2015 * diff --git a/src/invent.c b/src/invent.c index 430894aab..6c3a22107 100644 --- a/src/invent.c +++ b/src/invent.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 invent.c $NHDT-Date: 1447576348 2015/11/15 08:32:28 $ $NHDT-Branch: master $:$NHDT-Revision: 1.179 $ */ +/* NetHack 3.6 invent.c $NHDT-Date: 1450306195 2015/12/16 22:49:55 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.180 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -820,7 +820,7 @@ have_lizard() return FALSE; } -/* 3.6.0 tribute */ +/* 3.6 tribute */ struct obj * u_have_novel() { diff --git a/src/objnam.c b/src/objnam.c index 000595e7b..4d368ec5a 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 objnam.c $NHDT-Date: 1450261364 2015/12/16 10:22:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.157 $ */ +/* NetHack 3.6 objnam.c $NHDT-Date: 1450306207 2015/12/16 22:50:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.158 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3479,7 +3479,7 @@ typfnd: if (aname && objtyp == otmp->otyp) name = aname; - /* 3.6.0 tribute - fix up novel */ + /* 3.6 tribute - fix up novel */ if (otmp->otyp == SPE_NOVEL) { const char *novelname; diff --git a/src/shknam.c b/src/shknam.c index 728976cba..a3b5b5e41 100644 --- a/src/shknam.c +++ b/src/shknam.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 shknam.c $NHDT-Date: 1448094342 2015/11/21 08:25:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.38 $ */ +/* NetHack 3.6 shknam.c $NHDT-Date: 1450306213 2015/12/16 22:50:13 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.39 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -454,7 +454,7 @@ boolean mkspecl; struct permonst *ptr; int atype; - /* 3.6.0 tribute */ + /* 3.6 tribute */ if (mkspecl && (!strcmp(shp->name, "rare books") || !strcmp(shp->name, "second-hand bookstore"))) { struct obj *novel = mksobj_at(SPE_NOVEL, sx, sy, FALSE, FALSE); diff --git a/src/sounds.c b/src/sounds.c index f08fe9d20..5f5595018 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 sounds.c $NHDT-Date: 1446713641 2015/11/05 08:54:01 $ $NHDT-Branch: master $:$NHDT-Revision: 1.74 $ */ +/* NetHack 3.6 sounds.c $NHDT-Date: 1450306219 2015/12/16 22:50:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.75 $ */ /* Copyright (c) 1989 Janet Walz, Mike Threepoint */ /* NetHack may be freely redistributed. See license for details. */ @@ -908,7 +908,7 @@ register struct monst *mtmp; break; } case MS_RIDER: - /* 3.6.0 tribute */ + /* 3.6 tribute */ if (ptr == &mons[PM_DEATH] && !context.tribute.Deathnotice && u_have_novel()) { struct obj *book = u_have_novel(); diff --git a/src/spell.c b/src/spell.c index bc911f3c3..0ec696b3e 100644 --- a/src/spell.c +++ b/src/spell.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 spell.c $NHDT-Date: 1450128440 2015/12/14 21:27:20 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.73 $ */ +/* NetHack 3.6 spell.c $NHDT-Date: 1450306224 2015/12/16 22:50:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.74 $ */ /* Copyright (c) M. Stephenson 1988 */ /* NetHack may be freely redistributed. See license for details. */ @@ -465,7 +465,7 @@ register struct obj *spellbook; return 1; } - /* 3.6.0 tribute */ + /* 3.6 tribute */ if (booktype == SPE_NOVEL) { /* Obtain current Terry Pratchett book title */ const char *tribtitle = noveltitle(&spellbook->novelidx); diff --git a/sys/winnt/Install.nt b/sys/winnt/Install.nt index 1a66ddc4e..a9b2201b0 100644 --- a/sys/winnt/Install.nt +++ b/sys/winnt/Install.nt @@ -5,7 +5,7 @@ NetHack 3.6 on a Windows system (Windows 7/8.x/10 or later only. XP may work but is untested) ============================================================== - Last revision: $NHDT-Date: 1447979773 2015/11/20 00:36:13 $ + Last revision: $NHDT-Date: 1450306349 2015/12/16 22:52:29 $ Credit for the porting of NetHack to the Win32 Console Subsystem goes to the NT Porting Team started by Michael Allison. @@ -16,7 +16,7 @@ contributed the port. The PC Windows porting team consisting of Michael Allison, David Cohrs, Alex Kompel, Dion Nicolaas, Yitzhak Sapir, and Janet Walz maintained the -tty and graphical win32 versions of NetHack 3.6.0. +tty and graphical win32 versions of NetHack 3.6.1. You can build a TTY version of NetHack and a Windows Graphical version. You can use one of the following build environments: @@ -90,7 +90,7 @@ a 32-bit x86 version, or a 64-bit x64 version. The default Makefile is set up for a 32-bit x86 version, but that's only because it will run on the most number of existing Windows environments. -NetHack's save files and bones files in the 3.6.0 release have not +NetHack's save files and bones files in the 3.6.1 release have not evolved enough to allow them to interchange between the 32-bit version and the 64-bit version (or between different platforms). Hopefully that will change in an upcoming release. @@ -508,10 +508,10 @@ II. Executing the game If you will be running it by launching it from a shortcut, just use the following information when setting up the shortcut. - Description : NetHack 3.6.0 Console version + Description : NetHack 3.6.1 Console version Command Line : C:\NETHACK\BINARY\NETHACK.EXE - Description : NetHack 3.6.0 Graphical Interface + Description : NetHack 3.6.1 Graphical Interface Command Line : C:\NETHACK\BINARY\NETHACKW.EXE (changing the directory to the appropriate one of course) diff --git a/sys/winnt/nethack.def b/sys/winnt/nethack.def index aaa64b79f..e163eaf5e 100644 --- a/sys/winnt/nethack.def +++ b/sys/winnt/nethack.def @@ -1,5 +1,5 @@ NAME NETHACK -DESCRIPTION 'NetHack 3.6.0 for Windows NT' +DESCRIPTION 'NetHack 3.6.1 for Windows NT' EXETYPE WINDOWS STUB 'WINSTUB.EXE' CODE PRELOAD MOVEABLE DISCARDABLE diff --git a/win/macosx/NetHackGuidebook.applescript b/win/macosx/NetHackGuidebook.applescript index 04260d9ff..d6eae4db4 100644 --- a/win/macosx/NetHackGuidebook.applescript +++ b/win/macosx/NetHackGuidebook.applescript @@ -1,5 +1,5 @@ #!/usr/bin/osascript -# NetHack 3.6.0 NetHackGuidebook.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ +# NetHack 3.6.1 NetHackGuidebook.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2011 # NetHack may be freely redistributed. See license for details. diff --git a/win/macosx/NetHackTerm.applescript b/win/macosx/NetHackTerm.applescript index 127b2c2de..39c03bb66 100644 --- a/win/macosx/NetHackTerm.applescript +++ b/win/macosx/NetHackTerm.applescript @@ -1,5 +1,5 @@ #!/usr/bin/osascript -# NetHack 3.6.0 NetHackTerm.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ +# NetHack 3.6.1 NetHackTerm.applescript $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ # Copyright (c) Kenneth Lorber, Kensington, Maryland, 2011 # NetHack may be freely redistributed. See license for details. diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index e4f890260..798385c65 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mswproc.c $NHDT-Date: 1449751720 2015/12/10 12:48:40 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.95 $ */ +/* NetHack 3.6 mswproc.c $NHDT-Date: 1450306253 2015/12/16 22:50:53 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.96 $ */ /* Copyright (C) 2001 by Alex Kompel */ /* NetHack may be freely redistributed. See license for details. */ @@ -2222,7 +2222,7 @@ logDebug(const char *fmt, ...) /* Reading and writing settings from the registry. */ #define CATEGORYKEY "Software" #define COMPANYKEY "NetHack" -#define PRODUCTKEY "NetHack 3.6.0" +#define PRODUCTKEY "NetHack 3.6.1" #define SETTINGSKEY "Settings" #define MAINSHOWSTATEKEY "MainShowState" #define MAINMINXKEY "MainMinX" From bc83f28e46242b934fe19426773f1f99e070915a Mon Sep 17 00:00:00 2001 From: nhmall Date: Wed, 16 Dec 2015 17:59:10 -0500 Subject: [PATCH 17/21] compatibility macro correction 3.6.0 went out with editlevel at 2, not 0 --- include/patchlevel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/patchlevel.h b/include/patchlevel.h index db29d49f5..c0aa090a5 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 patchlevel.h $NHDT-Date: 1450306182 2015/12/16 22:49:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.114 $ */ +/* NetHack 3.6 patchlevel.h $NHDT-Date: 1450306740 2015/12/16 22:59:00 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.115 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -30,7 +30,7 @@ * PP = patch level, ee = edit level, L = literal suffix "L", * with all four numbers specified as two hexadecimal digits. */ -#define VERSION_COMPATIBILITY 0x03060000L +#define VERSION_COMPATIBILITY 0x03060002L /****************************************************************************/ /* Version 3.6.x */ From d68bb738d248526715dd9b728ce4c6f94e47c8cb Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 16 Dec 2015 18:16:39 -0800 Subject: [PATCH 18/21] fix #H4095 - naming discoveries list The menu for picking an item to name when using the "on discoveries list" choice for #name or C when that list spanned multiple pages was exiting for instead of advancing to next page. Space was being assigned as the selection letter for class header lines, which made no sense. --- doc/fixes36.1 | 2 ++ src/o_init.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 8be5a603c..f27e377eb 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -34,6 +34,8 @@ getpos() complaint about invalid movement keystroke didn't describe meta-chars 'realtime' value in xlogfile was incorrect if 'checkpoint' option was active make a previously-discovered scroll written with marker while blind have its label known so it can be read while blind +#name or C for discoveries list that spanned multiple pages would exit on + space instead of advancing to next page (workaround: use '>' instead) Platform- and/or Interface-Specific Fixes diff --git a/src/o_init.c b/src/o_init.c index a6aef9f90..ec1f56f5a 100644 --- a/src/o_init.c +++ b/src/o_init.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 o_init.c $NHDT-Date: 1449588093 2015/12/08 15:21:33 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */ +/* NetHack 3.6 o_init.c $NHDT-Date: 1450318588 2015/12/17 02:16:28 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -688,8 +688,8 @@ rename_disco() if (oclass != prev_class) { any.a_int = 0; - add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings, - ATR_NONE, let_to_name(oclass, FALSE, FALSE), + add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, + let_to_name(oclass, FALSE, FALSE), MENU_UNSELECTED); prev_class = oclass; } From 92858c3e3c24224110549b1a36b98ba4e9d0394f Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 16 Dec 2015 18:42:45 -0800 Subject: [PATCH 19/21] more menu screwup Like the just fixed naming for discoveries list, there are several other add_menu() calls which specify instead of 0 as a useless selector on separator lines. These others are all for role selection, where menus don't get big enough to need next-page. I don't know what I was thinking at the time, although it must have seemed like a good idea for some reason.... --- src/role.c | 4 ++-- win/tty/wintty.c | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/role.c b/src/role.c index 7be577b7f..61a18dfd2 100644 --- a/src/role.c +++ b/src/role.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 role.c $NHDT-Date: 1446861770 2015/11/07 02:02:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.34 $ */ +/* NetHack 3.6 role.c $NHDT-Date: 1450320155 2015/12/17 02:42:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.35 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1927,7 +1927,7 @@ winid where; any.a_int = 0; /* use four spaces of padding to fake a grayed out menu choice */ Sprintf(buf, "%4s%s forces %s", "", constrainer, forcedvalue); - add_menu(where, NO_GLYPH, &any, ' ', 0, ATR_NONE, buf, + add_menu(where, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED); } else if (what) { any.a_int = RS_menu_arg(which); diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 4c10ddeb9..2eace09e5 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 wintty.c $NHDT-Date: 1449052583 2015/12/02 10:36:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.116 $ */ +/* NetHack 3.6 wintty.c $NHDT-Date: 1450320157 2015/12/17 02:42:37 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.117 $ */ /* Copyright (c) David Cohrs, 1991 */ /* NetHack may be freely redistributed. See license for details. */ @@ -418,7 +418,7 @@ makepicks: /* add miscellaneous menu entries */ role_menu_extra(ROLE_RANDOM, win); any.a_int = 0; /* separator, not a choice */ - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED); role_menu_extra(RS_RACE, win); role_menu_extra(RS_GENDER, win); @@ -502,7 +502,7 @@ makepicks: /* add miscellaneous menu entries */ role_menu_extra(ROLE_RANDOM, win); any.a_int = 0; /* separator, not a choice */ - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED); role_menu_extra(RS_ROLE, win); role_menu_extra(RS_GENDER, win); @@ -591,7 +591,7 @@ makepicks: /* add miscellaneous menu entries */ role_menu_extra(ROLE_RANDOM, win); any.a_int = 0; /* separator, not a choice */ - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED); role_menu_extra(RS_ROLE, win); role_menu_extra(RS_RACE, win); @@ -676,7 +676,7 @@ makepicks: setup_algnmenu(win, TRUE, ROLE, RACE, GEND); role_menu_extra(ROLE_RANDOM, win); any.a_int = 0; /* separator, not a choice */ - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED); role_menu_extra(RS_ROLE, win); role_menu_extra(RS_RACE, win); @@ -760,11 +760,11 @@ makepicks: races[RACE].adj, (GEND == 1 && roles[ROLE].name.f) ? roles[ROLE].name.f : roles[ROLE].name.m); - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, pbuf, + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, pbuf, MENU_UNSELECTED); /* blank separator */ any.a_int = 0; - add_menu(win, NO_GLYPH, &any, ' ', 0, ATR_NONE, "", MENU_UNSELECTED); + add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED); /* [ynaq] menu choices */ any.a_int = 1; add_menu(win, NO_GLYPH, &any, 'y', 0, ATR_NONE, "Yes; start game", From f02253dbbbeda95a279a5a872e4ab961e7b922ed Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Thu, 17 Dec 2015 08:46:04 +0200 Subject: [PATCH 20/21] Fix bz189 H4092: Broken qt_xpms.h --- include/qt_xpms.h | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/include/qt_xpms.h b/include/qt_xpms.h index 0d97bfe02..a91ac5f11 100644 --- a/include/qt_xpms.h +++ b/include/qt_xpms.h @@ -1,4 +1,131 @@ /* clang-format off */ +/* XPM */ +static const char *blind_xpm[] = { +/* width height ncolors chars_per_pixel */ +"40 40 5 1", +/* colors */ +" c #000000", +". c None", +"X c #909090", +"o c #606060", +"O c #303030", +/* pixels */ +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"....ooooooooooooooooooooooooooooooooX...", +".... o...", +".... o...", +".... o...", +".... o...", +"......o ..o ......", +"......X O..X O......", +"....... o... o......", +".......o ....o .......", +"........O X.....O X.......", +".........O X.......O X........", +"..........o OX.........o OX.........", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................", +"........................................" +}; +/* XPM */ +static const char *cha_xpm[] = { +/* width height ncolors chars_per_pixel */ +"40 40 14 1", +/* colors */ +" c #F85848", +". c #949E9E", +"X c #F8B090", +"o c #E00028", +"O c #D4D4D4", +"+ c None", +"@ c #B0B0B0", +"# c #F82C24", +"$ c #F89E6C", +"% c #FF0000", +"& c #909090", +"* c #FFFFFF", +"= c #CEAA90", +"- c #DADAB6", +/* pixels */ +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"+++++++++++++++=#%#=+=#%% ++++++++++++++", +"++++++++++++++ %O%%%#%$$%o%=++++++++++++", +"+++++++++++++# +#%%o%%o%%%%% +++++++++++", +"+++++++++++ %%%%%%%%%%%%%%%%o#=+++++++++", +"+++++++++ o%%%%%%%%%%%%%%%%%%%%# +++++++", +"++++++ #%%%%%%o%%%o%%o%%o%o%%%%%o%o +++", +"++=#%%o%%%#= =*+**O*+**O*+- = =%%%%#@+++", +"++++ %=++*+*+**O****O****O*O*O*OO%=+++++", +"+++++.%=OO+*O*OO****+****+*O*+O&%=@+++++", +"++++++=%=*OO+**O**O*O**O*O*OO+$%=+++++++", +"+++++++#% +*OOOO****+****@O+*#%=++++++++", +"++++++++#%#*+**+O+OO+O+OOO*O#o#+++++++++", +"+++++++++o% O**+****O****O*#%%=+++++++++", +"+++++++++ %%#O*O****+****+ %o#++++++++++", +"++++++++++o%% XO*O**O*O**#%%%+++++++++++", +"++++++++++ %%%o%$-**+**$%%%%=+++++++++++", +"+++++++++++o%%$X$%%%%%%#= o#++++++++++++", +"++++++++++@ %%%o#O$$+$$$%%%=++++++++++++", +"++++++++++++#o%%%%%%%%o%%%=@++++++++++++", +"+++++++++++++ %%%%%%%%%%o=++++++++++++++", +"+++++++++++++++= & & @++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++", +"++++++++++++++++++++++++++++++++++++++++" +}; +/* XPM */ +static const char *chaotic_xpm[] = { +/* width height ncolors chars_per_pixel */ +"40 40 9 1", +/* colors */ +" c #000000", +". c #5C7A7A", +"X c None", +"o c #B0B0B0", +"O c #909090", +"+ c #788C8C", +"@ c #606060", +"# c #FFFFFF", +"$ c #303030", /* pixels */ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", From 8af8c42e627f56bf2b4389d185565b3e7ab12e5f Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Thu, 17 Dec 2015 12:47:03 +0200 Subject: [PATCH 21/21] Clarify regex support in the guidebook --- doc/Guidebook.mn | 3 ++- doc/Guidebook.tex | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index c6461cb8e..e20efeb9c 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -2671,7 +2671,8 @@ Regular expressions are normally POSIX extended regular expressions. It is possible to compile NetHack without regular expression support on a platform where there is no regular expression library. While this is not true of any modern platform, if your NetHack was built this way, patterns are instead glob -patterns. +patterns. This applies to Autopickup exceptions, Message types, Menu colors, +and User sounds. .hn 2 Configuring Autopickup Exceptions .pg diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 18af23511..a2e3e0a55 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -3228,7 +3228,8 @@ Regular expressions are normally POSIX extended regular expressions. It is possible to compile NetHack without regular expression support on a platform where there is no regular expression library. While this is not true of any modern platform, if your NetHack was built this way, patterns are instead glob -patterns. +patterns. This applies to Autopickup exceptions, Message types, Menu colors, +and User sounds. %.hn 2 \subsection*{Configuring Autopickup Exceptions}