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

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sun May 16 03:32:46 CEST 2010


Revision: 49045
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49045&view=rev
Author:   dreammaster
Date:     2010-05-16 01:32:46 +0000 (Sun, 16 May 2010)

Log Message:
-----------
Bugfixes for animation depth logic

Modified Paths:
--------------
    scummvm/trunk/engines/m4/mads_logic.cpp
    scummvm/trunk/engines/m4/mads_views.cpp
    scummvm/trunk/engines/m4/mads_views.h
    scummvm/trunk/engines/m4/rails.cpp
    scummvm/trunk/engines/m4/rails.h

Modified: scummvm/trunk/engines/m4/mads_logic.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_logic.cpp	2010-05-15 21:28:26 UTC (rev 49044)
+++ scummvm/trunk/engines/m4/mads_logic.cpp	2010-05-16 01:32:46 UTC (rev 49045)
@@ -79,29 +79,29 @@
 
 uint16 MadsSceneLogic::startSpriteSequence(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) {
 	M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1);
-	uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2),
-		spriteFrame->y + (spriteFrame->height() / 2));
+	uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2),
+		spriteFrame->y + (spriteFrame->height() / 2)));
 
 	return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, 
-		-1, 100, (int)pixel - 1, 1, ANIMTYPE_SINGLE_DIRECTION, 0, 0);
+		-1, 100, depth - 1, 1, ANIMTYPE_SINGLE_DIRECTION, 0, 0);
 }
 
 uint16 MadsSceneLogic::startCycledSpriteSequence(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) {
 	M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1);
-	uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2),
-		spriteFrame->y + (spriteFrame->height() / 2));
+	uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2),
+		spriteFrame->y + (spriteFrame->height() / 2)));
 
 	return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, 
-		-1, 100, (int)pixel - 1, 1, ANIMTYPE_CYCLED, 0, 0);
+		-1, 100, depth - 1, 1, ANIMTYPE_CYCLED, 0, 0);
 }
 
 uint16 MadsSceneLogic::startSpriteSequence3(uint16 srcSpriteIdx, int v0, int numTicks, int fld24, int timeoutTicks, int extraTicks) {
 	M4Sprite *spriteFrame = _madsVm->scene()->_spriteSlots.getSprite(srcSpriteIdx).getFrame(1);
-	uint8 pixel = *_madsVm->scene()->getWalkSurface()->getBasePtr(spriteFrame->x + (spriteFrame->width() / 2),
-		spriteFrame->y + (spriteFrame->height() / 2));
+	uint8 depth = _madsVm->_rails->getDepth(Common::Point(spriteFrame->x + (spriteFrame->width() / 2),
+		spriteFrame->y + (spriteFrame->height() / 2)));
 
 	return _madsVm->scene()->_sequenceList.add(srcSpriteIdx, v0, 1, fld24, timeoutTicks, extraTicks, numTicks, 0, 0, 
-		-1, 100, (int)pixel - 1, -1, ANIMTYPE_SINGLE_DIRECTION, 0, 0);
+		-1, 100, depth - 1, -1, ANIMTYPE_SINGLE_DIRECTION, 0, 0);
 }
 
 void MadsSceneLogic::activateHotspot(int idx, bool active) {

Modified: scummvm/trunk/engines/m4/mads_views.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_views.cpp	2010-05-15 21:28:26 UTC (rev 49044)
+++ scummvm/trunk/engines/m4/mads_views.cpp	2010-05-16 01:32:46 UTC (rev 49045)
@@ -258,7 +258,7 @@
 	_talkFont = _vm->_font->getFont(FONT_CONVERSATION_MADS);
 }
 
-int MadsKernelMessageList::add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, char *msg) {
+int MadsKernelMessageList::add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, const char *msg) {
 	// Find a free slot
 	uint idx = 0;
 	while ((idx < _entries.size()) && ((_entries[idx].flags & KMSG_ACTIVE) != 0))
@@ -291,6 +291,11 @@
 	return idx;
 }
 
+int MadsKernelMessageList::addQuote(int quoteId, int v2, uint32 timeout) {
+	const char *quoteStr = _madsVm->globals()->getQuote(quoteId);
+	return add(Common::Point(0, 0), 0x1110, KMSG_2 | KMSG_20, v2, timeout, quoteStr);
+}
+
 void MadsKernelMessageList::unk1(int msgIndex, int v1, int v2) {
 	if (msgIndex < 0)
 		return;
@@ -322,8 +327,8 @@
 
 	if (rec.flags & KMSG_ACTIVE) {
 		if (rec.flags & KMSG_8) {
-			*(rec.msg + rec.msgOffset) = rec.asciiChar;
-			*(rec.msg + rec.msgOffset + 1) = rec.asciiChar2;
+			//*(rec.msg + rec.msgOffset) = rec.asciiChar;
+			//*(rec.msg + rec.msgOffset + 1) = rec.asciiChar2;
 		}
 
 		if (rec.textDisplayIndex >= 0)
@@ -497,7 +502,7 @@
 }
 
 int MadsSequenceList::add(int spriteListIndex, int v0, int frameIndex, char field_24, int timeoutTicks, int extraTicks, int numTicks, 
-		int height, int width, char field_12, char scale, char depth, int frameInc, SpriteAnimType animType, int numSprites, 
+		int height, int width, char field_12, char scale, uint8 depth, int frameInc, SpriteAnimType animType, int numSprites, 
 		int frameStart) {
 
 	// Find a free slot

Modified: scummvm/trunk/engines/m4/mads_views.h
===================================================================
--- scummvm/trunk/engines/m4/mads_views.h	2010-05-15 21:28:26 UTC (rev 49044)
+++ scummvm/trunk/engines/m4/mads_views.h	2010-05-16 01:32:46 UTC (rev 49045)
@@ -131,7 +131,7 @@
 #define TIMED_TEXT_SIZE 10
 #define TEXT_4A_SIZE 30
 
-enum KernelMessageFlags {KMSG_1 = 1, KMSG_2 = 2, KMSG_4 = 4, KMSG_8 = 8, KMSG_40 = 0x40, KMSG_ACTIVE = 0x80};
+enum KernelMessageFlags {KMSG_1 = 1, KMSG_2 = 2, KMSG_4 = 4, KMSG_8 = 8, KMSG_20 = 0x20, KMSG_40 = 0x40, KMSG_ACTIVE = 0x80};
 
 class MadsKernelMessageListEntry {
 public:
@@ -151,7 +151,7 @@
 	bool field_1C;
 	AbortTimerMode abortMode;
 	uint16 actionNouns[3];
-	char *msg;
+	const char *msg;
 };
 
 class MadsKernelMessageList {
@@ -163,7 +163,8 @@
 	MadsKernelMessageList(MadsView &owner);
 
 	void clear();
-	int add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, char *msg);
+	int add(const Common::Point &pt, uint fontColour, uint8 flags, uint8 v2, uint32 timeout, const char *msg);
+	int addQuote(int quoteId, int v2, uint32 timeout);
 	void unk1(int msgIndex, int v1, int v2);
 	void setSeqIndex(int msgIndex, int seqIndex);
 	void remove(int msgIndex);
@@ -295,7 +296,7 @@
 	void clear();
 	bool addSubEntry(int index, SequenceSubEntryMode mode, int frameIndex, int abortVal);
 	int add(int spriteListIndex, int v0, int v1, char field_24, int timeoutTicks, int extraTicks, int numTicks, 
-		int height, int width, char field_12, char scale, char depth, int frameInc, SpriteAnimType animType, 
+		int height, int width, char field_12, char scale, uint8 depth, int frameInc, SpriteAnimType animType, 
 		int numSprites, int frameStart);
 	void remove(int timerIndex);
 	void setSpriteSlot(int timerIndex, MadsSpriteSlot &spriteSlot);

Modified: scummvm/trunk/engines/m4/rails.cpp
===================================================================
--- scummvm/trunk/engines/m4/rails.cpp	2010-05-15 21:28:26 UTC (rev 49044)
+++ scummvm/trunk/engines/m4/rails.cpp	2010-05-16 01:32:46 UTC (rev 49045)
@@ -95,6 +95,12 @@
 	return isWalkableData.result;
 }
 
+uint8 Rails::getDepth(const Common::Point &pt) {
+	// TODO: Check based on sceneResources
+	const byte *b = _walkCodes->getBasePtr(pt.x, pt.y);
+	return *b & 0xf;
+}
+
 // helper function
 uint8 getEndCode(int32 x, int32 y, Common::Rect rect) {
 	uint8 endCode = 0;

Modified: scummvm/trunk/engines/m4/rails.h
===================================================================
--- scummvm/trunk/engines/m4/rails.h	2010-05-15 21:28:26 UTC (rev 49044)
+++ scummvm/trunk/engines/m4/rails.h	2010-05-16 01:32:46 UTC (rev 49045)
@@ -72,6 +72,7 @@
 	void setCodeSurface(M4Surface *surface) { _walkCodes = surface; }
 	void clearRails();
 	int32 addRailNode(int32 x, int32 y, bool restoreEdges);
+	uint8 getDepth(const Common::Point &pt);
 
 private:
 	Common::Array<RailNode *> _nodes;


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