[Scummvm-cvs-logs] SF.net SVN: scummvm:[49437] scummvm/trunk/engines/m4

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sat Jun 5 06:18:23 CEST 2010


Revision: 49437
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49437&view=rev
Author:   dreammaster
Date:     2010-06-05 04:18:23 +0000 (Sat, 05 Jun 2010)

Log Message:
-----------
Various bugfixes to the animation code - first Rex animation now plays, albeit in the wrong place

Modified Paths:
--------------
    scummvm/trunk/engines/m4/animation.cpp
    scummvm/trunk/engines/m4/assets.cpp
    scummvm/trunk/engines/m4/assets.h
    scummvm/trunk/engines/m4/mads_views.cpp
    scummvm/trunk/engines/m4/mads_views.h

Modified: scummvm/trunk/engines/m4/animation.cpp
===================================================================
--- scummvm/trunk/engines/m4/animation.cpp	2010-06-05 01:55:17 UTC (rev 49436)
+++ scummvm/trunk/engines/m4/animation.cpp	2010-06-05 04:18:23 UTC (rev 49437)
@@ -354,14 +354,13 @@
 				
 				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;
 			}

Modified: scummvm/trunk/engines/m4/assets.cpp
===================================================================
--- scummvm/trunk/engines/m4/assets.cpp	2010-06-05 01:55:17 UTC (rev 49436)
+++ scummvm/trunk/engines/m4/assets.cpp	2010-06-05 04:18:23 UTC (rev 49437)
@@ -210,11 +210,12 @@
 	_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;

Modified: scummvm/trunk/engines/m4/assets.h
===================================================================
--- scummvm/trunk/engines/m4/assets.h	2010-06-05 01:55:17 UTC (rev 49436)
+++ scummvm/trunk/engines/m4/assets.h	2010-06-05 04:18:23 UTC (rev 49437)
@@ -114,7 +114,7 @@
 	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 @@
 	uint32 _frameStartOffset;
 	
 	// MADS sprite set fields
-	uint16 _assetType;
+	uint8 _mode;
+	bool _isBackground;
 
 	int32 parseSprite(bool isBigEndian = false);
 	void loadFrameHeader(SpriteAssetFrame &frameHeader, bool isBigEndian = false);

Modified: scummvm/trunk/engines/m4/mads_views.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_views.cpp	2010-06-05 01:55:17 UTC (rev 49436)
+++ scummvm/trunk/engines/m4/mads_views.cpp	2010-06-05 04:18:23 UTC (rev 49437)
@@ -156,10 +156,10 @@
 
 				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::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 @@
 		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;
 	}
 }
 

Modified: scummvm/trunk/engines/m4/mads_views.h
===================================================================
--- scummvm/trunk/engines/m4/mads_views.h	2010-06-05 01:55:17 UTC (rev 49436)
+++ scummvm/trunk/engines/m4/mads_views.h	2010-06-05 04:18:23 UTC (rev 49437)
@@ -68,8 +68,7 @@
 #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 {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list