-$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.45 $ $NHDT-Date: 1560009340 2019/06/08 15:55:40 $
+$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.48 $ $NHDT-Date: 1560085861 2019/06/09 13:11:01 $
This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however,
unlike watching a monster trying to swap out a cursed weapon for some other
weapon and failing, watching it wield a cursed weapon didn't report
that weapon becoming welded to the monster's hand/claw/whatever
-wizard-mode: wish for hidden monsters that pass is_hider test
+accept "hidden" as an attribute for wizard mode ^G monster creation; created
+ monsters which can't be seen will have their locations highlighted
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
------------------------------------------------------------------
elemental_clog() loop needed to guard against obliteration of the monster
that was trying to be placed
+using ^G to create "hidden mimic" shouldn't have marked it as undetected since
+ mimics 'hide' be appearing to be something else; honor "hidden" for
+ 'hides_under' creatures if/when created at location with object(s),
+ also for eels and other fish if/when created at water location
curses: sometimes the message window would show a blank line after a prompt
-/* NetHack 3.6 extern.h $NHDT-Date: 1559994622 2019/06/08 11:50:22 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.711 $ */
+/* NetHack 3.6 extern.h $NHDT-Date: 1560085861 2019/06/09 13:11:01 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.713 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
E void FDECL(newsym_force, (int, int));
E void FDECL(shieldeff, (XCHAR_P, XCHAR_P));
E void FDECL(tmp_at, (int, int));
-E void FDECL(flash_glyph_at, (int, int, int));
+E void FDECL(flash_glyph_at, (int, int, int, int));
E void FDECL(swallowed, (int));
E void FDECL(under_ground, (int));
E void FDECL(under_water, (int));
-/* NetHack 3.6 display.c $NHDT-Date: 1556835736 2019/05/02 22:22:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.101 $ */
+/* NetHack 3.6 display.c $NHDT-Date: 1560085863 2019/06/09 13:11:03 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.104 $ */
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
/* and Dave Cohrs, 1990. */
/* NetHack may be freely redistributed. See license for details. */
}
/*
- * flash_glyph_at(x, y, glyph)
+ * flash_glyph_at(x, y, glyph, repeatcount)
*
* Briefly flash between the passed glyph and the glyph that's
* meant to be at the location.
*/
void
-flash_glyph_at(x, y, tg)
-int x, y, tg;
+flash_glyph_at(x, y, tg, rpt)
+int x, y;
+int tg, rpt;
{
- int i, glyph[2];
-
- glyph[0] = tg;
- glyph[1] = (level.flags.hero_memory)
- ? levl[x][y].glyph
- : back_to_glyph(x, y);
- for (i = 0; i < 15; i++) {
- show_glyph(x, y, glyph[i % 2]);
- flush_screen(1);
- delay_output();
- }
- newsym(x, y);
+ int i, glyph[2];
+
+ rpt *= 2; /* two loop iterations per 'count' */
+ glyph[0] = tg;
+ glyph[1] = (level.flags.hero_memory) ? levl[x][y].glyph
+ : back_to_glyph(x, y);
+ /* even iteration count (guaranteed) ends with glyph[1] showing;
+ caller might want to override that, but no newsym() calls here
+ in case caller has tinkered with location visibility */
+ for (i = 0; i < rpt; i++) {
+ show_glyph(x, y, glyph[i % 2]);
+ flush_screen(1);
+ delay_output();
+ }
}
/*
-/* NetHack 3.6 read.c $NHDT-Date: 1559679496 2019/06/04 20:18:16 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.165 $ */
+/* NetHack 3.6 read.c $NHDT-Date: 1560085864 2019/06/09 13:11:04 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.171 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
d->fem = -1; /* gender not specified */
d->randmonst = FALSE;
d->maketame = d->makepeaceful = d->makehostile = FALSE;
- d->sleeping = d->saddled = d->invisible = FALSE;
+ d->sleeping = d->saddled = d->invisible = d->hidden = FALSE;
if ((tmpp = strstri(bufp, "saddled ")) != 0) {
d->saddled = TRUE;
struct _create_particular_data *d;
{
struct permonst *whichpm = NULL;
- int i, flashglyph, firstchoice = NON_PM;
+ int i, mx, my, firstchoice = NON_PM;
struct monst *mtmp;
- boolean madeany = FALSE, doflash = FALSE;
+ boolean madeany = FALSE;
if (!d->randmonst) {
firstchoice = d->which;
/* otherwise try again */
continue;
}
- flashglyph = mon_to_glyph(mtmp, rn2_on_display_rng);
+ mx = mtmp->mx, my = mtmp->my;
/* 'is_FOO()' ought to be called 'always_FOO()' */
if (d->fem != -1 && !is_male(mtmp->data) && !is_female(mtmp->data))
mtmp->female = d->fem; /* ignored for is_neuter() */
put_saddle_on_mon(otmp, mtmp);
}
if (d->invisible) {
- int mx = mtmp->mx, my = mtmp->my;
-
mon_set_minvis(mtmp);
if (does_block(mx, my, &levl[mx][my]))
block_point(mx, my);
else
unblock_point(mx, my);
- doflash = TRUE;
}
- if (d->hidden && is_hider(mtmp->data)) {
+ if (d->hidden
+ && ((is_hider(mtmp->data) && mtmp->data->mlet != S_MIMIC)
+ || (hides_under(mtmp->data) && OBJ_AT(mx, my))
+ || (mtmp->data->mlet == S_EEL && is_pool(mx, my))))
mtmp->mundetected = 1;
- doflash = TRUE;
- }
if (d->sleeping)
mtmp->msleeping = 1;
- if (doflash) {
- if (wizard && cansee(mtmp->mx, mtmp->my))
- if (!canseemon(mtmp) && !sensemon(mtmp))
- flash_glyph_at(mtmp->mx, mtmp->my, flashglyph);
+ /* iff asking for 'hidden', show locaton of every created monster
+ that can't be seen--whether that's due to successfully hiding
+ or vision issues (line-of-sight, invisibility, blindness) */
+ if (d->hidden && !canspotmon(mtmp)) {
+ int count = couldsee(mx, my) ? 8 : 4;
+ char saveviz = viz_array[my][mx];
+
+ if (!flags.sparkle)
+ count /= 2;
+ viz_array[my][mx] |= (IN_SIGHT | COULD_SEE);
+ flash_glyph_at(mx, my, mon_to_glyph(mtmp, newsym_rn2), count);
+ viz_array[my][mx] = saveviz;
+ newsym(mx, my);
}
madeany = TRUE;
/* in case we got a doppelganger instead of what was asked