From a379fe424c02cff2427750c0f5ac1898c7fe93df Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sat, 18 Mar 2006 10:30:47 +0000 Subject: 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 --- engines/scumm/camera.cpp | 6 +++--- engines/scumm/intern.h | 2 +- engines/scumm/script_v6.cpp | 2 +- engines/scumm/scumm.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'engines') 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); -- cgit v1.2.3