Opened 5 years ago

Closed 2 years ago

#10850 closed defect (fixed)

SHERLOCK: Rose tattoo city map glitch

Reported by: eriktorbjorn Owned by: dreammaster
Priority: normal Component: Engine: Sherlock
Version: Keywords:
Cc: Game: Sherlock Holmes: Case of the Rose Tattoo

Description

When you enter the city map screen in The Case of the Rose Tattoo, there is some sort of flicker that I think comes from the upper left section of the map being drawn, and then immediately the desired part of the map being drawn. It would be nice to eliminate that unnecessary redraw.

(It might also be nice to slow down the scrolling of the map just a tad, but that's subjective.)

Change History (3)

comment:1 by eriktorbjorn, 2 years ago

If I understand correctly, TattooMap::show() will:

  • Display the map by calling screen.slamArea(). ("Display the built map to the screen")
  • Set _targetScroll to the desired position (saved from earlier). ("Set initial scroll position")
  • At the same time, it will set screen._currentScroll to -1, -1, which will force the sceen to redraw since screen._currentScroll != _targetScroll.

So is there really any reason for the initial screen.slamArea()? Removing that seems to fix the glitch for me. Like this:

--- a/engines/sherlock/tattoo/tattoo_map.cpp
+++ b/engines/sherlock/tattoo/tattoo_map.cpp
@@ -117,9 +117,6 @@ int TattooMap::show() {
        screen._backBuffer2.create(SHERLOCK_SCREEN_WIDTH * 2, SHERLOCK_SCREEN_HEIGHT * 2);
        screen._backBuffer2.SHblitFrom(screen._backBuffer1);
 
-       // Display the built map to the screen
-       screen.slamArea(0, 0, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT);
-
        // Set initial scroll position
        _targetScroll = _bigPos;
        screen._currentScroll = Common::Point(-1, -1);

comment:2 by eriktorbjorn, 2 years ago

I've submitted this as a pull request: https://github.com/scummvm/scummvm/pull/3578

comment:3 by dreammaster, 2 years ago

Owner: set to dreammaster
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.