diff options
-rw-r--r-- | engines/m4/animation.cpp | 9 | ||||
-rw-r--r-- | engines/m4/assets.cpp | 11 | ||||
-rw-r--r-- | engines/m4/assets.h | 5 | ||||
-rw-r--r-- | engines/m4/mads_views.cpp | 12 | ||||
-rw-r--r-- | engines/m4/mads_views.h | 3 |
5 files changed, 20 insertions, 20 deletions
diff --git a/engines/m4/animation.cpp b/engines/m4/animation.cpp index bf49c649fb..a4e4ccbc0e 100644 --- a/engines/m4/animation.cpp +++ b/engines/m4/animation.cpp @@ -354,14 +354,13 @@ void MadsAnimation::update() { if (spriteSlotIndex == 0) { int slotIndex = _view->_spriteSlots.getIndex(); - _view->_spriteSlots[slotIndex].copy(_frameEntries[_oldFrameEntry].spriteSlot); - _view->_spriteSlots[slotIndex].seqIndex += 0x80; + MadsSpriteSlot &slot = _view->_spriteSlots[slotIndex]; + slot.copy(_frameEntries[_oldFrameEntry].spriteSlot); + slot.seqIndex = _frameEntries[_oldFrameEntry].seqIndex + 0x80; SpriteAsset &spriteSet = _view->_spriteSlots.getSprite( _view->_spriteSlots[slotIndex].spriteListIndex); - - _view->_spriteSlots[slotIndex].spriteType = (spriteSet.getAssetType() == 0) ? - SPRITE_FOUR : SPRITE_ZERO; + slot.spriteType = spriteSet.isBackground() ? BACKGROUND_SPRITE : FOREGROUND_SPRITE; } break; } diff --git a/engines/m4/assets.cpp b/engines/m4/assets.cpp index 91c371dec5..1f3cf278ae 100644 --- a/engines/m4/assets.cpp +++ b/engines/m4/assets.cpp @@ -210,11 +210,12 @@ void SpriteAsset::loadMadsSpriteAsset(MadsM4Engine *vm, Common::SeekableReadStre _maxHeight = 0; Common::SeekableReadStream *spriteStream = sprite.getItemStream(0); - - _assetType = spriteStream->readUint16LE(); - for (int i = 0; i < 18; i++) { - spriteStream->readUint16LE(); - } + _mode = spriteStream->readByte(); + spriteStream->skip(1); + int type1 = spriteStream->readUint16LE(); + int type2 = spriteStream->readUint16LE(); + _isBackground = (type1 != 0) && (type2 < 4); + spriteStream->skip(32); _frameCount = spriteStream->readUint16LE(); // we skip the rest of the data delete spriteStream; diff --git a/engines/m4/assets.h b/engines/m4/assets.h index 816a8dcff0..e5beffbcae 100644 --- a/engines/m4/assets.h +++ b/engines/m4/assets.h @@ -114,7 +114,7 @@ public: int32 getFrameHeight(int index); int32 getMaxFrameWidth() const { return _maxWidth; } int32 getMaxFrameHeight() const { return _maxHeight; } - uint16 getAssetType() const { return _assetType; } + bool isBackground() const { return _isBackground; } M4Sprite *getFrame(int frameIndex); void loadStreamingFrame(M4Sprite *frame, int frameIndex, int destX, int destY); RGB8* getPalette() { return _palette; } @@ -137,7 +137,8 @@ protected: uint32 _frameStartOffset; // MADS sprite set fields - uint16 _assetType; + uint8 _mode; + bool _isBackground; int32 parseSprite(bool isBigEndian = false); void loadFrameHeader(SpriteAssetFrame &frameHeader, bool isBigEndian = false); diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp index c656db83f1..bfd57c4add 100644 --- a/engines/m4/mads_views.cpp +++ b/engines/m4/mads_views.cpp @@ -156,10 +156,10 @@ void MadsSpriteSlots::drawBackground() { if (_entries[i].depth <= 1) { // No depth, so simply copy the frame onto the background - frame->copyTo(_owner._bgSurface, xp, yp); + frame->copyTo(_owner._bgSurface, xp, yp, 0); } else { // Depth was specified, so draw frame using scene's depth information - frame->copyTo(_owner._bgSurface, xp, yp, _entries[i].depth, _owner._depthSurface, 100); + frame->copyTo(_owner._bgSurface, xp, yp, _entries[i].depth, _owner._depthSurface, 100, 0); } } } @@ -954,9 +954,9 @@ void MadsSequenceList::remove(int seqIndex) { void MadsSequenceList::setSpriteSlot(int seqIndex, MadsSpriteSlot &spriteSlot) { MadsSequenceEntry &timerEntry = _entries[seqIndex]; - SpriteAsset &sprite = _owner._spriteSlots.getSprite(timerEntry.spriteListIndex); + SpriteAsset &spriteSet = _owner._spriteSlots.getSprite(timerEntry.spriteListIndex); - spriteSlot.spriteType = sprite.getAssetType() == 1 ? BACKGROUND_SPRITE : FOREGROUND_SPRITE; + spriteSlot.spriteType = spriteSet.isBackground() ? BACKGROUND_SPRITE : FOREGROUND_SPRITE; spriteSlot.seqIndex = seqIndex; spriteSlot.spriteListIndex = timerEntry.spriteListIndex; spriteSlot.frameNumber = ((timerEntry.field_2 == 1) ? 0x8000 : 0) | timerEntry.frameIndex; @@ -967,8 +967,8 @@ void MadsSequenceList::setSpriteSlot(int seqIndex, MadsSpriteSlot &spriteSlot) { spriteSlot.xp = timerEntry.msgPos.x; spriteSlot.yp = timerEntry.msgPos.y; } else { - spriteSlot.xp = sprite.getFrame(timerEntry.frameIndex - 1)->x; - spriteSlot.yp = sprite.getFrame(timerEntry.frameIndex - 1)->y; + spriteSlot.xp = spriteSet.getFrame(timerEntry.frameIndex - 1)->x; + spriteSlot.yp = spriteSet.getFrame(timerEntry.frameIndex - 1)->y; } } diff --git a/engines/m4/mads_views.h b/engines/m4/mads_views.h index 98944e6468..f44d640c8b 100644 --- a/engines/m4/mads_views.h +++ b/engines/m4/mads_views.h @@ -68,8 +68,7 @@ public: #define SPRITE_SLOTS_SIZE 50 enum SpriteIdSpecial { - BACKGROUND_SPRITE = -4, FULL_SCREEN_REFRESH = -2, EXPIRED_SPRITE = -1, SPRITE_ZERO = 0, FOREGROUND_SPRITE = 1, - SPRITE_FOUR = 4 + BACKGROUND_SPRITE = -4, FULL_SCREEN_REFRESH = -2, EXPIRED_SPRITE = -1, SPRITE_ZERO = 0, FOREGROUND_SPRITE = 1 }; class MadsSpriteSlots { |