aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sherlock')
-rw-r--r--engines/sherlock/people.h5
-rw-r--r--engines/sherlock/scene.cpp14
-rw-r--r--engines/sherlock/tattoo/tattoo_people.cpp9
-rw-r--r--engines/sherlock/tattoo/tattoo_people.h10
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 {