-$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.61 $ $NHDT-Date: 1578761136 2020/01/11 16:45:36 $
+$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.62 $ $NHDT-Date: 1578764038 2020/01/11 17:33:58 $
General Fixes and Modified Features
-----------------------------------
revealed map can seem intrusive; doesn't affect clairvoyance spell
replace "money" in in-game texts with "gold"
when hallucinating, see hallucinated currencies instead of bits for an ale
+when hallucinating, see hallucinated liquids when looking at water or lava
+ on the map
applying a spellbook hints about read charges left
wizard mode wishing for level topology can now create hidden doors (ask for
"secret door" when at a door or wall location) and hidden corridor
-/* NetHack 3.6 extern.h $NHDT-Date: 1578668018 2020/01/10 14:53:38 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.782 $ */
+/* NetHack 3.6 extern.h $NHDT-Date: 1578764033 2020/01/11 17:33:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.783 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
E int NDECL(doextlist);
E int NDECL(extcmd_via_menu);
E int NDECL(enter_explore_mode);
-E char *FDECL(trap_predicament, (char *, BOOLEAN_P));
+E char *FDECL(trap_predicament, (char *, int, BOOLEAN_P));
E void FDECL(enlightenment, (int, int));
E void FDECL(youhiding, (BOOLEAN_P, int));
E void FDECL(show_conduct, (int));
-/* NetHack 3.6 cmd.c $NHDT-Date: 1578668021 2020/01/10 14:53:41 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.390 $ */
+/* NetHack 3.6 cmd.c $NHDT-Date: 1578764033 2020/01/11 17:33:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.391 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
/* describe u.utraptype; used by status_enlightenment() and self_lookat() */
char *
-trap_predicament(outbuf, wizxtra)
+trap_predicament(outbuf, final, wizxtra)
char *outbuf;
+int final;
boolean wizxtra;
{
struct trap *t;
Strcpy(outbuf, "tethered to something buried");
break;
case TT_LAVA:
- /* surface() should always yield "lava" here unless hallucinatory
- surfaces get added someday [please don't...] */
- Sprintf(outbuf, "sinking into %s", surface(u.ux, u.uy));
+ Sprintf(outbuf, "sinking into %s", final ? "lava" : hliquid("lava"));
break;
case TT_INFLOOR:
Sprintf(outbuf, "stuck in %s", the(surface(u.ux, u.uy)));
char predicament[BUFSZ];
boolean anchored = (u.utraptype == TT_BURIEDBALL);
- (void) trap_predicament(predicament, wizard);
+ (void) trap_predicament(predicament, final, wizard);
if (u.usteed) { /* not `Riding' here */
Sprintf(buf, "%s%s ", anchored ? "you and " : "", steedname);
*buf = highc(*buf);
-/* NetHack 3.6 do_name.c $NHDT-Date: 1574648939 2019/11/25 02:28:59 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.167 $ */
+/* NetHack 3.6 do_name.c $NHDT-Date: 1578764034 2020/01/11 17:33:54 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.169 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Pasi Kallinen, 2018. */
/* NetHack may be freely redistributed. See license for details. */
"caramel sauce", "ink", "aqueous humour", "milk substitute",
"fruit juice", "glowing lava", "gastric acid", "mineral water",
"cough syrup", "quicksilver", "sweet vitriol", "grey goo", "pink slime",
+ /* "new coke (tm)", --better not */
};
+/* if hallucinating, return a random liquid instead of 'liquidpref' */
const char *
hliquid(liquidpref)
-const char *liquidpref;
+const char *liquidpref; /* use as-is when not hallucinating (unless empty) */
{
- return (Hallucination || !liquidpref) ? hliquids[rn2(SIZE(hliquids))]
- : liquidpref;
+ if (Hallucination || !liquidpref || !*liquidpref) {
+ int indx, count = SIZE(hliquids);
+
+ /* if we have a non-hallucinatory default value, include it
+ among the choices */
+ if (liquidpref && *liquidpref)
+ ++count;
+ indx = rn2_on_display_rng(count);
+ if (indx < SIZE(hliquids))
+ return hliquids[indx];
+ }
+ return liquidpref;
}
/* Aliases for road-runner nemesis
-/* NetHack 3.6 pager.c $NHDT-Date: 1578761137 2020/01/11 16:45:37 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.182 $ */
+/* NetHack 3.6 pager.c $NHDT-Date: 1578764034 2020/01/11 17:33:54 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.183 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */
Sprintf(eos(outbuf), ", chained to %s",
uball ? ansimpleoname(uball) : "nothing?");
if (u.utrap) /* bear trap, pit, web, in-floor, in-lava, tethered */
- Sprintf(eos(outbuf), ", %s", trap_predicament(trapbuf, FALSE));
+ Sprintf(eos(outbuf), ", %s", trap_predicament(trapbuf, 0, FALSE));
return outbuf;
}
static const char mon_interior[] = "the interior of a monster",
unreconnoitered[] = "unreconnoitered";
static char look_buf[BUFSZ];
- char prefix[BUFSZ];
+ char prefix[BUFSZ], gobbledygook[33];
int i, alt_i, j, glyph = NO_GLYPH,
skipped_venom = 0, found = 0; /* count of matching syms found */
boolean hit_trap, need_to_look = FALSE,
- submerged = (Underwater && !Is_waterlevel(&u.uz));
+ submerged = (Underwater && !Is_waterlevel(&u.uz)),
+ hallucinate = (Hallucination && !g.program_state.gameover);
const char *x_str;
nhsym tmpsym;
+ gobbledygook[0] = '\0'; /* no hallucinatory liquid (yet) */
if (looked) {
int oc;
unsigned os;
/* Check for monsters */
if (!iflags.terrainmode || (iflags.terrainmode & TER_MON) != 0) {
for (i = 1; i < MAXMCLASSES; i++) {
- if (sym == (looked ? g.showsyms[i + SYM_OFF_M] : def_monsyms[i].sym)
+ if (sym == (looked ? g.showsyms[i + SYM_OFF_M]
+ : def_monsyms[i].sym)
&& def_monsyms[i].explain && *def_monsyms[i].explain) {
need_to_look = TRUE;
if (!found) {
/* alt_i is now 3 or more and no longer of interest */
}
if (sym == (looked ? g.showsyms[i] : defsyms[i].sym) && *x_str) {
+ /* POOL, MOAT, and WATER are "water", LAVAPOOL is "molten lava" */
+ boolean water_or_lava = (!strcmp(x_str, "water")
+ || !strcmp(x_str, "molten lava"));
/* avoid "an unexplored", "an stone", "an air", "a water",
- "a floor of a room", "a dark part of a room";
+ "a molten lava", "a floor of a room", "a dark part of a room";
article==2 => "the", 1 => "an", 0 => (none) */
int article = strstri(x_str, " of a room") ? 2
: !(alt_i <= 2
|| strcmp(x_str, "air") == 0
|| strcmp(x_str, "land") == 0
- || strcmp(x_str, "water") == 0);
+ || water_or_lava);
+
+ /* substitute for "water" and "molten lava" when hallucinating */
+ if (water_or_lava && hallucinate) {
+ if (*gobbledygook)
+ continue; /* just 1 or player could tell h2o from lava */
+ x_str = strncpy(gobbledygook, hliquid(x_str),
+ (int) sizeof gobbledygook - 1);
+ gobbledygook[sizeof gobbledygook - 1] = '\0';
+ }
if (!found) {
if (is_cmap_trap(i)) {
pm = lookat(cc.x, cc.y, look_buf, monbuf);
if (pm && for_supplement)
*for_supplement = pm;
+ /* lookat() doesn't hallucinate liquids; substitute ours */
+ if (*gobbledygook && (!strcmp(look_buf, "water")
+ || !strcmp(look_buf, "molten lava")))
+ Strcpy(look_buf, gobbledygook);
+
*firstmatch = look_buf;
if (*(*firstmatch)) {
Sprintf(temp_buf, " (%s)", *firstmatch);
}
}
}
+ if (*firstmatch == gobbledygook) /* fixup for 'found==1' */
+ *firstmatch = strcpy(look_buf, gobbledygook);
return found;
}