From: PatR Date: Thu, 24 Dec 2020 21:41:17 +0000 (-0800) Subject: fix github issue #427 - unreadable mail X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5552f141ba721cbb5aabd02cea8f1085d43c5080;p=nethack fix github issue #427 - unreadable mail The change to make mail objects and monsters separate from mail delivery (so that toggling the latter wouldn't invalidate save and bones files) made it possible to wish for scrolls of mail, find such in bones left by someone who did, or write such via magic marker. That was probably unintentional but I've left it as-is. The problem was that reading such scrolls issued a warning: "What weird effect is this?" because reading scrolls of mail was only allowed when interacting with MAIL was enabled. The issue suggested replacing #if MAIL with #if MAIL_STRUCTURES in seffects(), and then insert #if MAIL in the part of reading that deals with 'real' (or randomly faked for micros) mail. I've done both of those, and also added a couple of message variations for the unreal cases. Closes #427 --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index d4a83e844..6a52bd5fc 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -1,4 +1,4 @@ -NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.400 $ $NHDT-Date: 1608749030 2020/12/23 18:43:50 $ +NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.401 $ $NHDT-Date: 1608846067 2020/12/24 21:41:07 $ General Fixes and Modified Features ----------------------------------- @@ -445,6 +445,9 @@ a long worm with no visible segments (but one internal segment) might trigger warning: tail 'segement' at <0,some_y>, worm at if teleported adding displacer beast inadvertently introduced a regression in swapping with pets, allowing them to be pulled into water by hero on/over water +splitting #if MAIL into #if MAIL_STRUCTURES and #if MAIL made it possible to + wish for and write scrolls of mail with MAIL disabled, but attempting + to read such a scroll issued impossible "What weird effect is this?" curses: 'msg_window' option wasn't functional for curses unless the binary also included tty support diff --git a/src/invent.c b/src/invent.c index 63f7904a9..5f14e2f46 100644 --- a/src/invent.c +++ b/src/invent.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 invent.c $NHDT-Date: 1606765212 2020/11/30 19:40:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.308 $ */ +/* NetHack 3.7 invent.c $NHDT-Date: 1608846067 2020/12/24 21:41:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.310 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -3784,6 +3784,15 @@ register struct obj *otmp, *obj; : (!has_omailcmd(otmp) || strcmp(OMAILCMD(obj), OMAILCMD(otmp)) != 0)) return FALSE; +#ifdef MAIL_STRUCTURES + if (obj->otyp == SCR_MAIL + /* wished or bones mail and hand written stamped scrolls + each have two flavors; spe keeps them separate from each + other but we want to keep their flavors separate too */ + && obj->spe > 0 && (obj->o_id % 2) != (otmp->o_id % 2)) + return FALSE; +#endif + /* should be moot since matching artifacts wouldn't be unique */ if (obj->oartifact != otmp->oartifact) return FALSE; diff --git a/src/read.c b/src/read.c index 6f8505dba..30809567e 100644 --- a/src/read.c +++ b/src/read.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 read.c $NHDT-Date: 1607945439 2020/12/14 11:30:39 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.205 $ */ +/* NetHack 3.7 read.c $NHDT-Date: 1608846072 2020/12/24 21:41:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.207 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -436,7 +436,7 @@ doread() } confused = (Confusion != 0); -#ifdef MAIL +#ifdef MAIL_STRUCTURES if (otyp == SCR_MAIL) { confused = FALSE; /* override */ /* reading mail is a convenience for the player and takes @@ -953,22 +953,38 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */ || objects[otyp].oc_name_known); switch (otyp) { -#ifdef MAIL - case SCR_MAIL: +#ifdef MAIL_STRUCTURES + case SCR_MAIL: { + boolean odd = (sobj->o_id % 2) == 1; + g.known = TRUE; - if (sobj->spe == 2) + switch (sobj->spe) { + case 2: /* "stamped scroll" created via magic marker--without a stamp */ - pline("This scroll is marked \"postage due\"."); - else if (sobj->spe) + pline("This scroll is marked \"%s\".", + odd ? "Postage Due" : "Return to Sender"); + break; + case 1: /* 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."); - else + note to the puzzled: the game Larn actually sends you junk + mail if you win! */ + pline("This seems to be %s.", + odd ? "a chain letter threatening your luck" + : "junk mail addressed to the finder of the Eye of Larn"); + break; + default: +#ifdef MAIL readmail(sobj); +#else + /* unreachable since with MAIL undefined, sobj->spe won't be 0; + as a precaution, be prepared to give arbitrary feedback; + caller has already reported that it disappears upon reading */ + pline("That was a scroll of mail?"); +#endif + break; + } break; + } #endif case SCR_ENCHANT_ARMOR: { register schar s;