diff options
Diffstat (limited to 'engines/sherlock')
-rw-r--r-- | engines/sherlock/people.h | 5 | ||||
-rw-r--r-- | engines/sherlock/scene.cpp | 14 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_people.cpp | 9 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_people.h | 10 |
4 files changed, 27 insertions, 11 deletions
diff --git a/engines/sherlock/people.h b/engines/sherlock/people.h index b59522e4b8..d790e4ccb0 100644 --- a/engines/sherlock/people.h +++ b/engines/sherlock/people.h @@ -87,6 +87,11 @@ public: * Walk to the co-ordinates passed, and then face the given direction */ virtual void walkToCoords(const Point32 &destPos, int destDir) = 0; + + /** + * Center the visible screen so that the person is in the center of the screen + */ + virtual void centerScreenOnPerson() {} }; class SherlockEngine; diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp index 2ae45b0530..8669d4c092 100644 --- a/engines/sherlock/scene.cpp +++ b/engines/sherlock/scene.cpp @@ -1207,15 +1207,6 @@ void Scene::transitionToScene() { // Standard info, so set it people[HOLMES]._position = hSavedPos; people[HOLMES]._sequenceNumber = hSavedFacing; - - if (saves._justLoaded && IS_ROSE_TATTOO) { - Tattoo::TattooUserInterface &ui = *(Tattoo::TattooUserInterface *)_vm->_ui; - - // For scrolling scenes, make sure the player is on-screen - ui._targetScroll.x = CLIP(people[HOLMES]._position.x / FIXED_INT_MULTIPLIER - - SHERLOCK_SCREEN_WIDTH / 8 - 250, 0, screen._backBuffer1.w() - SHERLOCK_SCREEN_WIDTH); - screen._currentScroll = ui._targetScroll; - } } else { // It's canimation information cAnimNum = hSavedFacing - 101; @@ -1230,6 +1221,11 @@ void Scene::transitionToScene() { people[HOLMES]._position = Common::Point(0, 0); } + // If the scene is capable of scrolling, set the current scroll so that whoever has control + // of the scroll code is in the middle of the screen + if (screen._backBuffer1.w() > SHERLOCK_SCREEN_WIDTH) + people[people._walkControl].centerScreenOnPerson(); + for (uint objIdx = 0; objIdx < _bgShapes.size(); ++objIdx) { Object &obj = _bgShapes[objIdx]; diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp index 7aaa0a082c..94a40780e6 100644 --- a/engines/sherlock/tattoo/tattoo_people.cpp +++ b/engines/sherlock/tattoo/tattoo_people.cpp @@ -1105,6 +1105,15 @@ void TattooPerson::walkHolmesToNPC() { } } +void TattooPerson::centerScreenOnPerson() { + Screen &screen = *_vm->_screen; + TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; + + ui._targetScroll.x = CLIP(_position.x / FIXED_INT_MULTIPLIER - SHERLOCK_SCREEN_WIDTH / 2, + 0, screen._backBuffer1.w() - SHERLOCK_SCREEN_WIDTH); + screen._currentScroll = ui._targetScroll; +} + /*----------------------------------------------------------------*/ TattooPeople::TattooPeople(SherlockEngine *vm) : People(vm) { diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h index fb3f6e7628..0983ca4dcc 100644 --- a/engines/sherlock/tattoo/tattoo_people.h +++ b/engines/sherlock/tattoo/tattoo_people.h @@ -176,6 +176,12 @@ public: */ void synchronize(Serializer &s); + + /** + * Walk Holmes to the NPC + */ + void walkHolmesToNPC(); + /** * This adjusts the sprites position, as well as it's animation sequence: */ @@ -207,9 +213,9 @@ public: virtual void setObjTalkSequence(int seq); /** - * Walk Holmes to the NPC + * Center the visible screen so that the person is in the center of the screen */ - void walkHolmesToNPC(); + virtual void centerScreenOnPerson(); }; class TattooPeople : public People { |