diff options
author | Paul Gilbert | 2010-07-04 00:38:16 +0000 |
---|---|---|
committer | Paul Gilbert | 2010-07-04 00:38:16 +0000 |
commit | 10e7581fe1a281f69875a6d76c9c1bf5aafa939c (patch) | |
tree | 14def76f9fbfc1b5b91c792b66804cca203c00f3 /engines/m4/mads_views.cpp | |
parent | 5872f5bb1fac5a8d4b8ddecf777e22ca23ecca39 (diff) | |
download | scummvm-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.cpp | 24 |
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; } } |