[Scummvm-cvs-logs] scummvm master -> 974348c77130867151a7443aad53ec18ba82fd00

dreammaster dreammaster at scummvm.org
Tue Nov 5 14:19:44 CET 2013


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:
974348c771 TSAGE: Implemented R2R shadowing effect


Commit: 974348c77130867151a7443aad53ec18ba82fd00
    https://github.com/scummvm/scummvm/commit/974348c77130867151a7443aad53ec18ba82fd00
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2013-11-05T05:19:02-08:00

Commit Message:
TSAGE: Implemented R2R shadowing effect

Changed paths:
    engines/tsage/core.cpp
    engines/tsage/core.h
    engines/tsage/graphics.cpp
    engines/tsage/graphics.h
    engines/tsage/ringworld2/ringworld2_logic.cpp
    engines/tsage/ringworld2/ringworld2_scenes1.cpp
    engines/tsage/ringworld2/ringworld2_scenes1.h
    engines/tsage/ringworld2/ringworld2_scenes3.cpp
    engines/tsage/ringworld2/ringworld2_scenes3.h



diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 553c321..fd36d4f 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -2735,9 +2735,24 @@ void SceneObject::draw() {
 	Rect destRect = _bounds;
 	destRect.translate(-g_globals->_sceneManager._scene->_sceneBounds.left,
 		-g_globals->_sceneManager._scene->_sceneBounds.top);
-	Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority);
 	GfxSurface frame = getFrame();
-	g_globals->gfxManager().copyFrom(frame, destRect, priorityRegion);
+	Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority);
+
+	if (g_vm->getGameID() == GType_Ringworld2) {
+		switch (_effect) {
+		case EFFECT_SHADOW_MAP: {
+			assert(_shadowMap);
+			
+			GLOBALS.gfxManager().getSurface().copyFrom(frame, frame.getBounds(), 
+				destRect, priorityRegion,  _shadowMap);
+			return;
+		}
+		default:
+			break;
+		}
+	}
+
+	GLOBALS.gfxManager().copyFrom(frame, destRect, priorityRegion);
 }
 
 /**
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 5971151..79ce1e8 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -467,7 +467,7 @@ enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MOD
 };
 
 enum Effect { EFFECT_NONE = 0, EFFECT_SHADED = 1, EFFECT_2 = 2, EFFECT_3 = 3,
-	EFFECT_4 = 4, EFFECT_SHADOW = 5, EFFECT_6 = 6 };
+	EFFECT_4 = 4, EFFECT_SHADOW_MAP = 5, EFFECT_6 = 6 };
 
 class SceneObject;
 
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index 3281062..f00dcf0 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -559,9 +559,11 @@ static GfxSurface ResizeSurface(GfxSurface &src, int xSize, int ySize, int trans
 }
 
 /**
- * Copys an area from one GfxSurface to another
+ * Copys an area from one GfxSurface to another.
+ * 
  */
-void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Region *priorityRegion) {
+void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, 
+		Region *priorityRegion, const byte *shadowMap) {
 	GfxSurface srcImage;
 	if (srcBounds.isEmpty())
 		return;
@@ -631,8 +633,15 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi
 					if (!priorityRegion || !priorityRegion->contains(Common::Point(
 							xp + g_globals->_sceneManager._scene->_sceneBounds.left,
 							destBounds.top + y + g_globals->_sceneManager._scene->_sceneBounds.top))) {
-						if (*tempSrc != src._transColor)
-							*tempDest = *tempSrc;
+						if (*tempSrc != src._transColor) {
+							if (shadowMap) {
+								// Using a shadow map, so translate the dest pixel using the mapping array
+								*tempDest = shadowMap[*tempDest];
+							} else {
+								// Otherwise, it's a standard pixel copy
+								*tempDest = *tempSrc;
+							}
+						}
 					}
 					++tempSrc;
 					++tempDest;
diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h
index 497cd76..d31bac0 100644
--- a/engines/tsage/graphics.h
+++ b/engines/tsage/graphics.h
@@ -105,7 +105,8 @@ public:
 	void setBounds(const Rect &bounds) { _bounds = bounds; }
 	const Rect &getBounds() const { return _bounds; }
 
-	void copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Region *priorityRegion = NULL);
+	void copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, 
+		Region *priorityRegion = NULL, const byte *shadowMap = NULL);
 	void copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion = NULL) {
 		copyFrom(src, src.getBounds(), destBounds, priorityRegion);
 	}
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 5cda153..b495a7e 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -1326,26 +1326,6 @@ bool SceneActor::startAction(CursorType action, Event &event) {
 GfxSurface SceneActor::getFrame() {
 	GfxSurface frame = SceneObject::getFrame();
 
-	// TODO: Proper effects handling
-	switch (_effect) {
-	case EFFECT_NONE:
-	case EFFECT_SHADOW:
-		// TODO: Figure out purpose of setting image flags to 64, and getting
-		// scene priorities -1 or _shade
-		break;
-	case EFFECT_SHADED:
-		// TODO: Transposing using R2_GLOBALS._pixelArrayMap
-		break;
-	case EFFECT_2:
-		// No effect
-		break;
-	case EFFECT_4:
-		break;
-	default:
-		// TODO: Default effect
-		break;
-	}
-
 	return frame;
 }
 
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 1247000..1b75ed4 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -868,7 +868,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
 		_palette1.loadPalette(1101);
 		R2_GLOBALS._player.postInit();
 		R2_GLOBALS._player.disableControl();
-		R2_GLOBALS._player._effect = EFFECT_SHADOW;
+		R2_GLOBALS._player._effect = EFFECT_SHADOW_MAP;
 		R2_GLOBALS._player._shadowMap = _shadowPaletteMap;
 		R2_GLOBALS._player.setup(1102, 3, 2);
 		R2_GLOBALS._player.setObjectWrapper(NULL);
@@ -894,7 +894,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
 		_shipFormationShadow.setup(1102, 6, 2);
 		_shipFormationShadow._moveRate = 30;
 		_shipFormationShadow._moveDiff.x = 2;
-		_shipFormationShadow._effect = EFFECT_SHADOW;
+		_shipFormationShadow._effect = EFFECT_SHADOW_MAP;
 		_shipFormationShadow._shadowMap = _shadowPaletteMap;
 
 		R2_GLOBALS._sound1.play(86);
@@ -1084,8 +1084,7 @@ void Scene1100::signal() {
 	case 11: {
 		setAction(&_sequenceManager1, this, 1106, &_animation, &_laserShot, &_leftImpacts, NULL);
 
-		// CHECKME: Shadow effect should be set next to shadowmap
-		R2_GLOBALS._player._effect = EFFECT_SHADOW;
+		R2_GLOBALS._player._effect = EFFECT_SHADOW_MAP;
 		R2_GLOBALS._player.setup(1102, 3, 2);
 		R2_GLOBALS._player.setPosition(Common::Point(-50, 131));
 		R2_GLOBALS._sound2.play(84);
@@ -6909,7 +6908,7 @@ void Scene1500::postInit(SceneObjectList *OwnerList) {
 
 	_starshipShadow.postInit();
 	_starshipShadow.setup(1401, 1, 1);
-	_starshipShadow._effect = EFFECT_SHADOW;
+	_starshipShadow._effect = EFFECT_SHADOW_MAP;
 	_starshipShadow.fixPriority(10);
 	_starshipShadow._shadowMap = _shadowPaletteMap;
 
@@ -6921,7 +6920,7 @@ void Scene1500::postInit(SceneObjectList *OwnerList) {
 	if (R2_GLOBALS._sceneManager._previousScene != 1010) {
 		_smallShipShadow.postInit();
 		_smallShipShadow.setup(1401, 2, 1);
-		_smallShipShadow._effect = EFFECT_SHADOW;
+		_smallShipShadow._effect = EFFECT_SHADOW_MAP;
 		_smallShipShadow.fixPriority(10);
 		_smallShipShadow._shadowMap = _shadowPaletteMap;
 
@@ -10570,17 +10569,17 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
 
 	R2_GLOBALS._sound1.play(134);
 
-	_actor1.postInit();
-	_actor1.fixPriority(10);
+	_playerShadow.postInit();
+	_playerShadow.fixPriority(10);
 
 	if (R2_GLOBALS._player._characterIndex == R2_QUINN)
-		_actor1.setVisage(1112);
+		_playerShadow.setVisage(1112);
 	else
-		_actor1.setVisage(1111);
+		_playerShadow.setVisage(1111);
 
-	_actor1._effect = EFFECT_SHADOW;
-	_actor1._shadowMap = _shadowPaletteMap;
-	R2_GLOBALS._player._linkedActor = &_actor1;
+	_playerShadow._effect = EFFECT_SHADOW_MAP;
+	_playerShadow._shadowMap = _shadowPaletteMap;
+	R2_GLOBALS._player._linkedActor = &_playerShadow;
 
 	_actor2.postInit();
 	_actor2.fixPriority(10);
@@ -10589,7 +10588,7 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
 	else
 		_actor2.setVisage(1112);
 
-	_actor2._effect = EFFECT_SHADOW;
+	_actor2._effect = EFFECT_SHADOW_MAP;
 	_actor2._shadowMap = _shadowPaletteMap;
 	_actor12._linkedActor = &_actor2;
 
@@ -10611,7 +10610,7 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
 		_ledgeHopper.setPosition(Common::Point(220, 137));
 		_ledgeHopper.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL);
 
-		_actor1.hide();
+		_playerShadow.hide();
 		_actor2.hide();
 		R2_GLOBALS._events.setCursor(CURSOR_WALK);
 		_stripManager.start(539, this);
@@ -10788,7 +10787,8 @@ void Scene1700::signal() {
 	case 40:
 		R2_GLOBALS._player.disableControl();
 		_sceneMode = 1704;
-		setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, &_actor10, &_ledgeHopper, &_actor1, &_actor2, NULL);
+		setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, 
+			&_actor10, &_ledgeHopper, &_playerShadow, &_actor2, NULL);
 		break;
 	case 50:
 		if (R2_GLOBALS._player._characterIndex == R2_QUINN)
@@ -11527,7 +11527,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
 	else
 		_playerShadow.setVisage(1110);
 
-	_playerShadow._effect = EFFECT_SHADOW;
+	_playerShadow._effect = EFFECT_SHADOW_MAP;
 	_playerShadow._shadowMap = _shadowPaletteMap;
 
 	R2_GLOBALS._player._linkedActor = &_playerShadow;
@@ -11539,7 +11539,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
 	else
 		_companionShadow.setVisage(1111);
 
-	_companionShadow._effect = EFFECT_SHADOW;
+	_companionShadow._effect = EFFECT_SHADOW_MAP;
 	_companionShadow._shadowMap = _shadowPaletteMap;
 
 	_companion._linkedActor = &_companionShadow;
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h
index c9b6244..4808898 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -749,7 +749,7 @@ public:
 	SpeakerSeeker _seekerSpeaker;
 	NamedHotspot _item1;
 	Item2 _item2;
-	SceneActor _actor1;
+	SceneActor _playerShadow;
 	SceneActor _actor2;
 	SceneActor _slabWest;
 	SceneActor _slabEast;
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
index dd01c3d..6eda26d 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -5204,18 +5204,20 @@ void Scene3800::enterArea() {
 		R2_GLOBALS._player.setStrip(3);
 		R2_GLOBALS._player.changeZoom(-1);
 		R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
-		_balloonQuinn.postInit();
-		_balloonQuinn.fixPriority(10);
-		_balloonQuinn.changeZoom(-1);
-		_balloonQuinn.setVisage(1110);
-		_balloonQuinn._effect = EFFECT_SHADOW;
-		_balloonQuinn._shadowMap = this->_shadowPaletteMap;
-		R2_GLOBALS._player._linkedActor = &_balloonQuinn;
+
+		_quinnShadow.postInit();
+		_quinnShadow.fixPriority(10);
+		_quinnShadow.changeZoom(-1);
+		_quinnShadow.setVisage(1110);
+		_quinnShadow._effect = EFFECT_SHADOW_MAP;
+		_quinnShadow._shadowMap = this->_shadowPaletteMap;
+		R2_GLOBALS._player._linkedActor = &_quinnShadow;
+
 		switch (R2_GLOBALS._sceneManager._previousScene) {
 		case 2600:
 			_balloon.postInit();
 			_harness.postInit();
-			_balloonQuinn.hide();
+			_quinnShadow.hide();
 			_sceneMode = 3800;
 			setAction(&_sequenceManager1, this, 3800, &R2_GLOBALS._player, 
 				&_balloon, &_harness, NULL);
@@ -5361,7 +5363,7 @@ void Scene3800::signal() {
 		g_globals->_sceneManager.changeScene(3900);
 		break;
 	case 3800:
-		_balloonQuinn.show();
+		_quinnShadow.show();
 		_balloon.remove();
 		_harness.remove();
 		R2_GLOBALS._player.enableControl();
@@ -5514,13 +5516,13 @@ void Scene3900::postInit(SceneObjectList *OwnerList) {
 	R2_GLOBALS._player.changeZoom(-1);
 	R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
 
-	_linkedQuinn.postInit();
-	_linkedQuinn.fixPriority(10);
-	_linkedQuinn.changeZoom(-1);
-	_linkedQuinn.setVisage(1110);
-	_linkedQuinn._effect = EFFECT_SHADOW;
-	_linkedQuinn._shadowMap = _shadowPaletteMap;
-	R2_GLOBALS._player._linkedActor = &_linkedQuinn;
+	_quinnShadow.postInit();
+	_quinnShadow.fixPriority(10);
+	_quinnShadow.changeZoom(-1);
+	_quinnShadow.setVisage(1110);
+	_quinnShadow._effect = EFFECT_SHADOW_MAP;
+	_quinnShadow._shadowMap = _shadowPaletteMap;
+	R2_GLOBALS._player._linkedActor = &_quinnShadow;
 
 	if ((R2_GLOBALS._desertPreviousDirection == 2) && (R2_GLOBALS._sceneManager._previousScene != 2700)) {
 //		loadScene(3825);
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h
index 48236ee..6191b75 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.h
@@ -786,7 +786,7 @@ class Scene3800 : public SceneExt {
 public:
 	SceneObject _balloon;
 	SceneObject _harness;
-	SceneActor _balloonQuinn;
+	SceneActor _quinnShadow;
 	NamedHotspot _background;
 	NorthExit _northExit;
 	EastExit _eastExit;
@@ -833,7 +833,7 @@ class Scene3900 : public SceneExt {
 		virtual void changeScene();
 	};
 public:
-	SceneActor _linkedQuinn;
+	SceneActor _quinnShadow;
 	NamedHotspot _background;
 	NorthExit _northExit;
 	EastExit _eastExit;






More information about the Scummvm-git-logs mailing list