aboutsummaryrefslogtreecommitdiff
path: root/engines/m4/mads_views.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2010-07-04 00:38:16 +0000
committerPaul Gilbert2010-07-04 00:38:16 +0000
commit10e7581fe1a281f69875a6d76c9c1bf5aafa939c (patch)
tree14def76f9fbfc1b5b91c792b66804cca203c00f3 /engines/m4/mads_views.cpp
parent5872f5bb1fac5a8d4b8ddecf777e22ca23ecca39 (diff)
downloadscummvm-rg350-10e7581fe1a281f69875a6d76c9c1bf5aafa939c.tar.gz
scummvm-rg350-10e7581fe1a281f69875a6d76c9c1bf5aafa939c.tar.bz2
scummvm-rg350-10e7581fe1a281f69875a6d76c9c1bf5aafa939c.zip
Added support for horizontally flipped foreground sprites, which are indicated by setting the high bit of frame numbers
svn-id: r50638
Diffstat (limited to 'engines/m4/mads_views.cpp')
-rw-r--r--engines/m4/mads_views.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp
index 9241774d16..9845db7203 100644
--- a/engines/m4/mads_views.cpp
+++ b/engines/m4/mads_views.cpp
@@ -201,15 +201,23 @@ void MadsSpriteSlots::drawForeground(M4Surface *viewport) {
assert(slot.spriteListIndex < (int)_sprites.size());
SpriteAsset &spriteSet = *_sprites[slot.spriteListIndex];
+ // Get the sprite frame
+ int frameNumber = slot.frameNumber & 0x7fff;
+ bool flipped = (slot.frameNumber & 0x8000) != 0;
+ M4Sprite *sprite = spriteSet.getFrame(frameNumber - 1);
+
+ M4Surface *spr = sprite;
+ if (flipped) {
+ // Create a flipped copy of the sprite temporarily
+ spr = sprite->flipHorizontal();
+ }
+
if ((slot.scale < 100) && (slot.scale != -1)) {
// Minimalised drawing
- assert(slot.spriteListIndex < (int)_sprites.size());
- M4Sprite *spr = spriteSet.getFrame((slot.frameNumber & 0x7fff) - 1);
viewport->copyFrom(spr, slot.xp, slot.yp, slot.depth, _owner._depthSurface, slot.scale,
- spr->getTransparencyIndex());
+ sprite->getTransparencyIndex());
} else {
int xp, yp;
- M4Sprite *spr = spriteSet.getFrame(slot.frameNumber - 1);
if (slot.scale == -1) {
xp = slot.xp - _owner._posAdjust.x;
@@ -221,12 +229,16 @@ void MadsSpriteSlots::drawForeground(M4Surface *viewport) {
if (slot.depth > 1) {
// Draw the frame with depth processing
- viewport->copyFrom(spr, xp, yp, slot.depth, _owner._depthSurface, 100, spr->getTransparencyIndex());
+ viewport->copyFrom(spr, xp, yp, slot.depth, _owner._depthSurface, 100, sprite->getTransparencyIndex());
} else {
// No depth, so simply draw the image
- spr->copyTo(viewport, xp, yp, spr->getTransparencyIndex());
+ spr->copyTo(viewport, xp, yp, sprite->getTransparencyIndex());
}
}
+
+ // Free sprite if it was a flipped one
+ if (flipped)
+ delete spr;
}
}