[Scummvm-cvs-logs] scummvm master -> dac35ac1cc2f94022ba3435b4231b9dd4ac8d60f

dreammaster dreammaster at scummvm.org
Sun Mar 4 10:25:34 CET 2012


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
dac35ac1cc TSAGE: Some cleanup of R2R Animation Player, and fix for playing when objects are active


Commit: dac35ac1cc2f94022ba3435b4231b9dd4ac8d60f
    https://github.com/scummvm/scummvm/commit/dac35ac1cc2f94022ba3435b4231b9dd4ac8d60f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2012-03-04T01:24:54-08:00

Commit Message:
TSAGE: Some cleanup of R2R Animation Player, and fix for playing when objects are active

Changed paths:
    engines/tsage/ringworld2/ringworld2_logic.cpp
    engines/tsage/ringworld2/ringworld2_logic.h
    engines/tsage/ringworld2/ringworld2_scenes0.cpp
    engines/tsage/ringworld2/ringworld2_scenes0.h



diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 4cfcc29..a06899f 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -1623,7 +1623,7 @@ AnimationPlayer::AnimationPlayer(): EventHandler() {
 
 	_screenBounds = R2_GLOBALS._gfxManagerInstance._bounds;
 	_rect1 = R2_GLOBALS._gfxManagerInstance._bounds;
-	_paletteMode = 0;
+	_paletteMode = ANIMPALMODE_REPLACE_PALETTE;
 	_field3A = 1;
 	_sliceHeight = 1;
 	_field58 = 1;
@@ -1709,7 +1709,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) {
 	
 	debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded);
 
-	// Set up animation data array
+	// Set up animation data objects
 	_animData1 = new AnimationData();
 	_sliceCurrent = _animData1;
 
@@ -1737,21 +1737,25 @@ bool AnimationPlayer::load(int animId, Action *endAction) {
 
 	// Handle starting palette
 	switch (_paletteMode) {
-	case 0:
-		// Use existing active palette
+	case ANIMPALMODE_REPLACE_PALETTE:
+		// Use the palette provided with the animation directly
 		_palette.getPalette();
 		for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) {
-			uint r, g, b;
-			_palette.getEntry(idx, &r, &g, &b);
+			byte r = _subData._palData[idx * 3];
+			byte g = _subData._palData[idx * 3 + 1];
+			byte b = _subData._palData[idx * 3 + 2];
+
 			R2_GLOBALS._scenePalette.setEntry(idx, r, g, b);
 		}
 
 		R2_GLOBALS._sceneManager._hasPalette = true;
 		break;
-	case 2:
+	case ANIMPALMODE_NONE:
 		break;
 
 	default:
+		// ANIMPALMODE_CURR_PALETTE
+		// Use the closest matching colours in the currently active palette to those specified in the animation
 		for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) {
 			byte r = _subData._palData[idx * 3];
 			byte g = _subData._palData[idx * 3 + 1];
@@ -1858,12 +1862,26 @@ void AnimationPlayer::drawFrame(int sliceIndex) {
 		break;
 	}
 
-	if (_field56 == 42) {
+	// Unlock the screen surface
+	R2_GLOBALS._screenSurface.unlockSurface();
+
+	if (_objectMode == 42) {
 		_screenBounds.expandPanes();
+
+		// Copy the drawn frame to the back surface
+		Rect srcRect = R2_GLOBALS._screenSurface.getBounds();
+		Rect destRect = srcRect;
+		destRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
+		R2_GLOBALS._sceneManager._scene->_backSurface.copyFrom(R2_GLOBALS._screenSurface,
+			srcRect, destRect);
+
+		// Draw any objects into the scene
 		R2_GLOBALS._sceneObjects->draw();
 	} else {
-		if (R2_GLOBALS._sceneManager._hasPalette)
+		if (R2_GLOBALS._sceneManager._hasPalette) {
+			R2_GLOBALS._sceneManager._hasPalette = false;
 			R2_GLOBALS._scenePalette.refresh();
+		}
 	}
 }
 
@@ -1916,7 +1934,7 @@ void AnimationPlayer::close() {
 	// Close the resource file
 	_resourceFile.close();
 
-	if (_field56 != 42) {
+	if (_objectMode != 42) {
 		// flip screen in original
 	}
 
diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h
index b63c0ac..0b573bf 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.h
+++ b/engines/tsage/ringworld2/ringworld2_logic.h
@@ -375,6 +375,9 @@ public:
 	int _animSlicesSize;
 };
 
+enum AnimationPaletteMode { ANIMPALMODE_REPLACE_PALETTE = 0, ANIMPALMODE_CURR_PALETTE = 1,
+		ANIMPALMODE_NONE = 2 };
+
 class AnimationPlayer: public EventHandler {
 private:
 	void rleDecode(const byte *pSrc, byte *pDest, int size);
@@ -390,7 +393,7 @@ public:
 	Rect _rect1, _screenBounds;
 	int _field38;
 	int _field3A, _paletteMode;
-	int _field56;
+	int _objectMode;
 	int _field58, _sliceHeight;
 	byte _palIndexes[256];
 	ScenePalette _palette;
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
index 94a1193..4c98fcf 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
@@ -1549,18 +1549,18 @@ void Scene180::signal() {
 
 	switch (_sceneMode++) {
 	case 0:
-		setFrameInc(6);
+		setSceneDelay(6);
 		break;
 
 	case 1:
 		_field412 = 1;
 		R2_GLOBALS._sceneManager._hasPalette = true;
-		_animationPlayer._paletteMode = 2;
+		_animationPlayer._paletteMode = ANIMPALMODE_NONE;
 		_animationPlayer._v = 1;
-		_animationPlayer._field56 = 1;
+		_animationPlayer._objectMode = 1;
 		R2_GLOBALS._scene180Mode = 1;
 
-		_animationPlayer.load(1, NULL);
+		_animationPlayer.load(1);
 		R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._subData._palData, 0, 256);
 
 		R2_GLOBALS._sound1.play(1);
@@ -1571,9 +1571,9 @@ void Scene180::signal() {
 		R2_GLOBALS._paneRefreshFlag[0] = 3;
 
 		if (R2_GLOBALS._sound1.isPlaying()) {
-			setFrameInc(1);
+			setSceneDelay(1);
 		} else {
-			setFrameInc(180);
+			setSceneDelay(180);
 		}
 		break;
 
@@ -1583,7 +1583,7 @@ void Scene180::signal() {
 		if (R2_GLOBALS._sound1.isPlaying())
 			_sceneMode = 3;
 
-		setFrameInc(1);
+		setSceneDelay(1);
 		break;
 
 	case 4:
@@ -1598,9 +1598,9 @@ void Scene180::signal() {
 		break;
 
 	case 5:
-		_animationPlayer._paletteMode = 2;
+		_animationPlayer._paletteMode = ANIMPALMODE_NONE;
 		_animationPlayer._v = 1;
-		_animationPlayer._field56 = 1;
+		_animationPlayer._objectMode = 1;
 		R2_GLOBALS._scene180Mode = 2;
 		_animationPlayer.load(2);
 
@@ -1614,9 +1614,9 @@ void Scene180::signal() {
 		R2_GLOBALS._paneRefreshFlag[0] = 3;
 
 		if (R2_GLOBALS._sound1.isPlaying()) {
-			setFrameInc(1);
+			setSceneDelay(1);
 		} else {
-			setFrameInc(180);
+			setSceneDelay(180);
 		}
 		break;
 
@@ -1625,19 +1625,19 @@ void Scene180::signal() {
 		R2_GLOBALS._scene180Mode = 2;
 		if (R2_GLOBALS._sound1.isPlaying())
 			_sceneMode = 7;
-		setFrameInc(1);
+		setSceneDelay(1);
 		break;
 
 	case 9:
 		R2_GLOBALS._sound1.play(3);
 		clearScreen();
-		setFrameInc(2);
+		setSceneDelay(2);
 		break;
 
 	case 10:
 		loadScene(4002);
 		R2_GLOBALS._scenePalette.loadPalette(0);
-		setFrameInc(6);
+		setSceneDelay(6);
 		break;
 
 	case 11:
@@ -1656,7 +1656,7 @@ void Scene180::signal() {
 	case 24:
 	case 26:
 	case 46:
-		setFrameInc((R2_GLOBALS._speechSubtitles & 1) ? 1 : 18);
+		setSceneDelay((R2_GLOBALS._speechSubtitles & 1) ? 1 : 18);
 		break;
 
 	case 13:
@@ -1691,7 +1691,7 @@ void Scene180::signal() {
 		_field412 = 0;
 		_object4.remove();
 		_object5.remove();
-		setFrameInc(2);
+		setSceneDelay(2);
 		break;
 
 	case 28:
@@ -1703,9 +1703,9 @@ void Scene180::signal() {
 
 	case 29:
 		_field412 = 1;
-		_animationPlayer._paletteMode = 0;
+		_animationPlayer._paletteMode = ANIMPALMODE_REPLACE_PALETTE;
 		_animationPlayer._v = 1;
-		_animationPlayer._field56 = 42;
+		_animationPlayer._objectMode = 42;
 		R2_GLOBALS._scene180Mode = 3;
 		_animationPlayer.load(3);
 		break;
@@ -1727,7 +1727,7 @@ void Scene180::signal() {
 
 		if (R2_GLOBALS._sceneManager._hasPalette)
 			R2_GLOBALS._scenePalette.refresh();
-		setFrameInc(6);
+		setSceneDelay(6);
 		break;
 
 	case 32:
@@ -1799,19 +1799,19 @@ void Scene180::signal() {
 
 	case 39:
 		R2_GLOBALS._sound1.changeSound(8);
-		setFrameInc(1);
+		setSceneDelay(1);
 		break;
 
 	case 40:
-		_animationPlayer._paletteMode = 2;
-		_animationPlayer._field56 = 1;
+		_animationPlayer._paletteMode = ANIMPALMODE_NONE;
+		_animationPlayer._objectMode = 1;
 		R2_GLOBALS._scene180Mode = 4;
 		if (_animationPlayer.load(4)) {
 			_animationPlayer.dispatch();
 			R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 8, this);
 		} else {
 			_sceneMode = 43;
-			setFrameInc(1);
+			setSceneDelay(1);
 		}
 		break;
 
@@ -1823,7 +1823,7 @@ void Scene180::signal() {
 	case 42:
 		R2_GLOBALS._scene180Mode = 4;
 		R2_GLOBALS._paneRefreshFlag[0] = 3;
-		setFrameInc(1);
+		setSceneDelay(1);
 		break;
 
 	case 44:
@@ -1832,7 +1832,7 @@ void Scene180::signal() {
 		if (R2_GLOBALS._sceneManager._hasPalette)
 			R2_GLOBALS._scenePalette.refresh();
 
-		setFrameInc(6);
+		setSceneDelay(6);
 		break;
 
 	case 45:
@@ -1841,9 +1841,9 @@ void Scene180::signal() {
 
 	case 48:
 		_field412 = 1;
-		_animationPlayer._paletteMode = 2;
+		_animationPlayer._paletteMode = ANIMPALMODE_NONE;
 		_animationPlayer._v = 1;
-		_animationPlayer._field56 = 1;
+		_animationPlayer._objectMode = 1;
 		R2_GLOBALS._scene180Mode = 15;
 		_animationPlayer.load(15, NULL);
 
@@ -1854,7 +1854,7 @@ void Scene180::signal() {
 	case 49:
 		R2_GLOBALS._scene180Mode = 15;
 		R2_GLOBALS._paneRefreshFlag[0] = 3;
-		setFrameInc(1);
+		setSceneDelay(1);
 		break;
 
 	case 50:
@@ -1865,7 +1865,7 @@ void Scene180::signal() {
 	}
 }
 
-void Scene180::setFrameInc(int v) {
+void Scene180::setSceneDelay(int v) {
 	_frameInc = v;
 	_frameNumber = R2_GLOBALS._events.getFrameNumber();
 }
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h
index e39efbc..2f52f95 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes0.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.h
@@ -195,7 +195,7 @@ class Scene180: public SceneExt {
 		void signal();
 	};
 private:
-	void setFrameInc(int v);
+	void setSceneDelay(int v);
 public:
 	SpeakerWebbster _webbsterSpeaker;
 	SpeakerDutyOfficer _dutyOfficerSpeaker;






More information about the Scummvm-git-logs mailing list