[Scummvm-cvs-logs] SF.net SVN: scummvm: [28738] scummvm/trunk/engines/saga/animation.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sun Aug 26 01:46:05 CEST 2007


Revision: 28738
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28738&view=rev
Author:   thebluegr
Date:     2007-08-25 16:46:04 -0700 (Sat, 25 Aug 2007)

Log Message:
-----------
Added a temporary workaround for an issue with animations

Modified Paths:
--------------
    scummvm/trunk/engines/saga/animation.cpp

Modified: scummvm/trunk/engines/saga/animation.cpp
===================================================================
--- scummvm/trunk/engines/saga/animation.cpp	2007-08-25 23:29:53 UTC (rev 28737)
+++ scummvm/trunk/engines/saga/animation.cpp	2007-08-25 23:46:04 UTC (rev 28738)
@@ -379,7 +379,9 @@
 	fillFrameOffsets(anim);
 
 	// Set animation data
-	anim->currentFrame = 0;
+	// HACK: We set currentFrame to -1, as the first frame of the animation is never drawn otherwise
+	// (check Anim::play)
+	anim->currentFrame = -1;
 	anim->completed = 0;
 	anim->cycles = anim->maxFrame;
 
@@ -462,23 +464,29 @@
 		return;
 	}
 
+	// HACK: The first frame of the animation is never shown when entering a scene
+	// For now, we initialize currentFrame to be -1 instead of 0 and we draw the
+	// first frame of the animation on the next iteration of Anim::play
+	// FIXME: find out why this occurs and remove this hack. Note that when this
+	// hack is removed, currentFrame should be initialized to 0 again in Anim::load
+	if (anim->currentFrame < 0) {
+		anim->currentFrame = 0;
+		event.type = kEvTOneshot;
+		event.code = kAnimEvent;
+		event.op = kEventFrame;
+		event.param = animId;
+		event.time = 0;
+
+		_vm->_events->queue(&event);
+		return;
+	}
+
 	if (anim->completed < anim->cycles) {
 		if (anim->currentFrame < 0)
 			anim->currentFrame = 0;
 
 		frame = anim->currentFrame;
 
-		// WORKAROUND for a buggy animation in IHNM. Animation 0 in scene 67 (the mob of angry prisoners) should
-		// start from frame 0, not frame 1. Frame 0 is the background of the animation (the mob of prisoners), whereas
-		// the rest of the frames are their animated arms. Therefore, in order for the prisoners to appear correctly,
-		// frame 0 should be displayed as the first frame, but anim->currentframe is set to 1, which means that the
-		// prisoners will never be shown. In the original, the prisoners (first frame in the animation) are shown a
-		// bit after the animation is started (which is wrong again, but not that apparent), whereas in ScummVM the
-		// first frame is never shown. Therefore, make sure that for this animation, frame 0 is shown first
-		if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 4 && 
-			_vm->_scene->currentSceneNumber() == 67 && animId == 0 && anim->completed == 1)
-			frame = 0;
-
 		// FIXME: if start > 0, then this works incorrectly
 		decodeFrame(anim, anim->frameOffsets[frame], displayBuffer, _vm->getDisplayWidth() * _vm->getDisplayHeight());
 		_vm->_frameCount++;	


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