aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/m4/animation.cpp9
-rw-r--r--engines/m4/assets.cpp11
-rw-r--r--engines/m4/assets.h5
-rw-r--r--engines/m4/mads_views.cpp12
-rw-r--r--engines/m4/mads_views.h3
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 {