From: PatR Date: Sun, 18 Apr 2021 00:16:44 +0000 (-0700) Subject: fix pull request #491 - color of converted altar X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c79e7601a02abdfc080d82a14f0a215410eec54d;p=nethack fix pull request #491 - color of converted altar A display optimization assumed that the color of a glyph wouldn't change unless the glyph itself changed, but there is a single glyph for all altars and unaligned is shown with a different color than the three aligned ones. If there was an unaligned altar outside of Gehennom (orcish mine town, some quests) and an invisible hero (without see invisible) converted it, it stayed the old color until there was some other reason to update that screen location. Fixes #491 --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index a6ec8281d..bb5c3e4cd 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -605,6 +605,8 @@ wearing a ring of protection and any amulet behaved as if wearing an amulet of messaging for genetic engineer attacks had several problems give genetic engineers teleport capability (as they had in slash'em); 'port away after polymorphing someone so that they don't just repeat that +if an invisible hero managed to convert an unaligned altar to an aligned one + with color enabled, altar wasn't immediately redrawn with new color curses: 'msg_window' option wasn't functional for curses unless the binary also included tty support diff --git a/src/display.c b/src/display.c index 1b766f4f4..3a1a8d111 100644 --- a/src/display.c +++ b/src/display.c @@ -1593,11 +1593,17 @@ show_glyph(int x, int y, int glyph) if (g.gbuf[y][x].glyph != glyph #ifndef UNBUFFERED_GLYPHINFO - /* I don't think we have to test for changes in TTYCHAR or COLOR - because they typically only change if the glyph changed */ - || g.gbuf[y][x].glyphinfo.glyphflags != glyphinfo.glyphflags + /* flags might change (single object vs pile, monster tamed or pet + gone feral), color might change (altar's alignment converted by + invisible hero), but ttychar normally won't change unless the + glyph does too (changing boulder symbol would be an exception, + but that triggers full redraw so doesn't matter here); still, + be thorough and check everything */ + || g.gbuf[y][x].glyphinfo.glyphflags != glyphinfo.glyphflags + || g.gbuf[y][x].glyphinfo.ttychar != glyphinfo.ttychar + || g.gbuf[y][x].glyphinfo.color != glyphinfo.color #endif - || iflags.use_background_glyph ) { + || iflags.use_background_glyph) { g.gbuf[y][x].glyph = glyph; g.gbuf[y][x].gnew = 1; #ifndef UNBUFFERED_GLYPHINFO