From 5f676aa56c77e1d48032e94b1613ac651cba46a8 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 9 Jun 2019 07:46:14 -0400 Subject: [PATCH] extend wizard-mode display effect to unseen invisible monsters --- doc/fixes36.3 | 3 ++- src/read.c | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 43b3b0863..961ed254f 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -66,7 +66,7 @@ thrown or kicked light source (lit lamp, candle, oil) should emit light as it 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 -debug mode wishing for hidden monsters that pass is_hider test +wizard-mode: wish for hidden monsters that pass is_hider test Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository @@ -117,6 +117,7 @@ classify sources as released, beta, or work-in-progress via NH_DEVEL_STATUS rather than just released vs beta via BETA if you reach the edge of a level (relatively uncommon) and try to move off, report that you can't go farther if the 'mention_walls' option is set +wizard-mode: display effect to show where an unseen wished-for monster landed NetHack Community Patches (or Variation) Included diff --git a/src/read.c b/src/read.c index 97678dba2..8ae59abd1 100644 --- a/src/read.c +++ b/src/read.c @@ -2522,9 +2522,9 @@ create_particular_creation(d) struct _create_particular_data *d; { struct permonst *whichpm = NULL; - int i, firstchoice = NON_PM; + int i, saveglyph, firstchoice = NON_PM; struct monst *mtmp; - boolean madeany = FALSE; + boolean madeany = FALSE, doflash = FALSE; if (!d->randmonst) { firstchoice = d->which; @@ -2570,19 +2570,25 @@ struct _create_particular_data *d; } if (d->invisible) { int mx = mtmp->mx, my = mtmp->my; + saveglyph = glyph_at(mx, my); mon_set_minvis(mtmp); if (does_block(mx, my, &levl[mx][my])) block_point(mx, my); else unblock_point(mx, my); + if (saveglyph == glyph_at(mx, my)) + saveglyph = mon_to_glyph(mtmp, rn2_on_display_rng); + doflash = TRUE; + } + if (d->hidden && is_hider(mtmp->data)) { + saveglyph = glyph_at(mtmp->mx, mtmp->my); + mtmp->mundetected = 1; + newsym(mtmp->mx, mtmp->my); + doflash = TRUE; } if (d->sleeping) mtmp->msleeping = 1; - if (d->hidden && is_hider(mtmp->data)) { - int saveglyph = glyph_at(mtmp->mx, mtmp->my); - - mtmp->mundetected = 1; - newsym(mtmp->mx, mtmp->my); + if (doflash) { if (wizard && cansee(mtmp->mx, mtmp->my)) if (!canseemon(mtmp) && !sensemon(mtmp)) flash_glyph_at(mtmp->mx, mtmp->my, saveglyph);