aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorTravis Howell2006-03-18 10:30:47 +0000
committerTravis Howell2006-03-18 10:30:47 +0000
commita379fe424c02cff2427750c0f5ac1898c7fe93df (patch)
tree6e920d7b8bba51826548d0e44b5390ae3400c18e /engines
parent05ee5cf2bdca6b97b6cd7ce93bfbe80cfc9a61fe (diff)
downloadscummvm-rg350-a379fe424c02cff2427750c0f5ac1898c7fe93df.tar.gz
scummvm-rg350-a379fe424c02cff2427750c0f5ac1898c7fe93df.tar.bz2
scummvm-rg350-a379fe424c02cff2427750c0f5ac1898c7fe93df.zip
The camera position is always set by loadRoomWithEgo opcode in HE games, through cameraFollows. Fixes glitches when changing rooms in fbear and other early games.
svn-id: r21355
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/camera.cpp6
-rw-r--r--engines/scumm/intern.h2
-rw-r--r--engines/scumm/script_v6.cpp2
-rw-r--r--engines/scumm/scumm.h2
4 files changed, 6 insertions, 6 deletions
diff --git a/engines/scumm/camera.cpp b/engines/scumm/camera.cpp
index 8521bd96a2..45df41d20c 100644
--- a/engines/scumm/camera.cpp
+++ b/engines/scumm/camera.cpp
@@ -59,7 +59,7 @@ void ScummEngine::setCameraAt(int pos_x, int pos_y) {
stopTalk();
}
-void ScummEngine::setCameraFollows(Actor *a) {
+void ScummEngine::setCameraFollows(Actor *a, bool setCamera) {
int t, i;
@@ -75,7 +75,7 @@ void ScummEngine::setCameraFollows(Actor *a) {
t = a->_pos.x / 8 - _screenStartStrip;
- if (t < camera._leftTrigger || t > camera._rightTrigger)
+ if (t < camera._leftTrigger || t > camera._rightTrigger || setCamera == true)
setCameraAt(a->_pos.x, 0);
for (i = 1; i < _numActors; i++) {
@@ -250,7 +250,7 @@ void ScummEngine_v7::setCameraAt(int pos_x, int pos_y) {
}
}
-void ScummEngine_v7::setCameraFollows(Actor *a) {
+void ScummEngine_v7::setCameraFollows(Actor *a, bool setCamera) {
byte oldfollow = camera._follows;
int ax, ay;
diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h
index 72a8eb53ba..cd666c1049 100644
--- a/engines/scumm/intern.h
+++ b/engines/scumm/intern.h
@@ -831,7 +831,7 @@ protected:
virtual void readIndexBlock(uint32 blocktype, uint32 itemsize);
virtual void setCameraAt(int pos_x, int pos_y);
- virtual void setCameraFollows(Actor *a);
+ virtual void setCameraFollows(Actor *a, bool setCamera = false);
virtual void moveCamera();
virtual void panCameraTo(int x, int y);
diff --git a/engines/scumm/script_v6.cpp b/engines/scumm/script_v6.cpp
index 5f7e436f15..d5784c58f9 100644
--- a/engines/scumm/script_v6.cpp
+++ b/engines/scumm/script_v6.cpp
@@ -1347,7 +1347,7 @@ void ScummEngine_v6::o6_loadRoomWithEgo() {
if (_game.version == 6) {
camera._cur.x = camera._dest.x = a->_pos.x;
- setCameraFollows(a);
+ setCameraFollows(a, (_game.heversion >= 60));
}
_fullRedraw = true;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 48f8081f2d..54b5d8356c 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1055,7 +1055,7 @@ protected:
void cameraMoved();
void setCameraAtEx(int at);
virtual void setCameraAt(int pos_x, int pos_y);
- virtual void setCameraFollows(Actor *a);
+ virtual void setCameraFollows(Actor *a, bool setCamera = false);
virtual void moveCamera();
virtual void panCameraTo(int x, int y);
void clampCameraPos(Common::Point *pt);