diff options
author | Paul Gilbert | 2010-06-13 10:50:54 +0000 |
---|---|---|
committer | Paul Gilbert | 2010-06-13 10:50:54 +0000 |
commit | 4c6d276ce914cafc170732fb7203145c8a763b37 (patch) | |
tree | 13b246a31575ae165289681ea40ab188b59d2e02 | |
parent | 466479eb77dfd04c7116f97f93e2f8013442307b (diff) | |
download | scummvm-rg350-4c6d276ce914cafc170732fb7203145c8a763b37.tar.gz scummvm-rg350-4c6d276ce914cafc170732fb7203145c8a763b37.tar.bz2 scummvm-rg350-4c6d276ce914cafc170732fb7203145c8a763b37.zip |
Bugfixes for correct moving of the screen viewport within an animation
svn-id: r49629
-rw-r--r-- | engines/m4/animation.cpp | 6 | ||||
-rw-r--r-- | engines/m4/mads_scene.cpp | 1 | ||||
-rw-r--r-- | engines/m4/mads_views.cpp | 11 | ||||
-rw-r--r-- | engines/m4/mads_views.h | 2 |
4 files changed, 13 insertions, 7 deletions
diff --git a/engines/m4/animation.cpp b/engines/m4/animation.cpp index cf2d201b81..9b6d5d1a6f 100644 --- a/engines/m4/animation.cpp +++ b/engines/m4/animation.cpp @@ -333,13 +333,15 @@ void MadsAnimation::update() { // Handle any offset adjustment for sprites as of this frame if (_view->_posAdjust.x != misc.posAdjust.x) { - misc.posAdjust.x = _view->_posAdjust.x; + _view->_posAdjust.x = misc.posAdjust.x; screenChanged = true; } if (_view->_posAdjust.y != misc.posAdjust.y) { - misc.posAdjust.y = _view->_posAdjust.y; + _view->_posAdjust.y = misc.posAdjust.y; screenChanged = true; } + + if (screenChanged) { // Signal the entire screen needs refreshing _view->_spriteSlots.fullRefresh(); diff --git a/engines/m4/mads_scene.cpp b/engines/m4/mads_scene.cpp index f98684de6a..d910340930 100644 --- a/engines/m4/mads_scene.cpp +++ b/engines/m4/mads_scene.cpp @@ -655,7 +655,6 @@ void MadsSceneResources::load(int sceneNumber, const char *resName, int v0, M4Su drawStyle = stream->readUint16LE(); width = stream->readUint16LE(); height = stream->readUint16LE(); - assert((width == 320) && (height == 156)); stream->skip(24); diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp index 98b04e9f2d..178fd90fd3 100644 --- a/engines/m4/mads_views.cpp +++ b/engines/m4/mads_views.cpp @@ -855,10 +855,15 @@ void MadsDirtyAreas::mergeAreas(int idx1, int idx2) { da1.textActive = true; } -void MadsDirtyAreas::copy(M4Surface *dest, M4Surface *src, int yOffset) { +void MadsDirtyAreas::copy(M4Surface *dest, M4Surface *src, int yOffset, const Common::Point &posAdjust) { for (uint i = 0; i < _entries.size(); ++i) { + const Common::Rect &srcBounds = _entries[i].bounds; + + Common::Rect bounds(srcBounds.left + posAdjust.x, srcBounds.top + posAdjust.y, + srcBounds.right + posAdjust.x, srcBounds.bottom + posAdjust.y); + if (_entries[i].active && _entries[i].bounds.isValidRect()) - src->copyTo(dest, _entries[i].bounds, _entries[i].bounds.left, _entries[i].bounds.top + yOffset); + src->copyTo(dest, bounds, _entries[i].bounds.left, _entries[i].bounds.top + yOffset); } } @@ -1202,7 +1207,7 @@ void MadsView::refresh() { _dirtyAreas.merge(1, DIRTY_AREAS_SIZE); // Copy dirty areas to the main display surface - _dirtyAreas.copy(_view, _bgSurface, _yOffset); + _dirtyAreas.copy(_view, _bgSurface, _yOffset, _posAdjust); // Handle dirty areas for foreground objects _spriteSlots.setDirtyAreas(); diff --git a/engines/m4/mads_views.h b/engines/m4/mads_views.h index c0f3790a23..f0ded634b1 100644 --- a/engines/m4/mads_views.h +++ b/engines/m4/mads_views.h @@ -289,7 +289,7 @@ public: void merge(int startIndex, int count); bool intersects(int idx1, int idx2); void mergeAreas(int idx1, int idx2); - void copy(M4Surface *dest, M4Surface *src, int yOffset); + void copy(M4Surface *dest, M4Surface *src, int yOffset, const Common::Point &posAdjust); }; enum SpriteAnimType {ANIMTYPE_CYCLED = 1, ANIMTYPE_REVERSIBLE = 2}; |