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

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Wed Mar 10 12:43:49 CET 2010


Revision: 48223
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48223&view=rev
Author:   dreammaster
Date:     2010-03-10 11:43:48 +0000 (Wed, 10 Mar 2010)

Log Message:
-----------
Split up the SceneResources class into a generic common set, with specific versions each for M4 and Mads, and merged the MadsSceneInfo data into it

Modified Paths:
--------------
    scummvm/trunk/engines/m4/m4_scene.cpp
    scummvm/trunk/engines/m4/m4_scene.h
    scummvm/trunk/engines/m4/mads_scene.cpp
    scummvm/trunk/engines/m4/mads_scene.h
    scummvm/trunk/engines/m4/scene.cpp
    scummvm/trunk/engines/m4/scene.h
    scummvm/trunk/engines/m4/staticres.cpp
    scummvm/trunk/engines/m4/staticres.h

Modified: scummvm/trunk/engines/m4/m4_scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/m4_scene.cpp	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/m4_scene.cpp	2010-03-10 11:43:48 UTC (rev 48223)
@@ -25,9 +25,9 @@
 
 #include "common/system.h"
 
+#include "m4/m4_scene.h"
 #include "m4/dialogs.h"
 #include "m4/globals.h"
-#include "m4/scene.h"
 #include "m4/events.h"
 #include "m4/graphics.h"
 #include "m4/rails.h"
@@ -38,7 +38,7 @@
 
 namespace M4 {
 
-M4Scene::M4Scene(M4Engine *vm): Scene(vm) {
+M4Scene::M4Scene(M4Engine *vm): _sceneResources(), Scene(vm, &_sceneResources) {
 	_vm = vm;
 	_sceneSprites = NULL;
 	_interfaceSurface = new M4InterfaceView(vm);

Modified: scummvm/trunk/engines/m4/m4_scene.h
===================================================================
--- scummvm/trunk/engines/m4/m4_scene.h	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/m4_scene.h	2010-03-10 11:43:48 UTC (rev 48223)
@@ -36,9 +36,18 @@
 #define MAINMENU_SCENE_BURGER 903
 #define FIRST_SCENE 101
 
+class M4SceneResources : public SceneResources {
+public:
+	int32 frontY, backY;
+	int32 frontScale, backScale;
+	int16 depthTable[16];
+	int32 railNodeCount;	// # of rails
+};
+
 class M4Scene : public Scene {
 private:
 	M4Engine *_vm;
+	M4SceneResources _sceneResources;
 	SpriteAsset *_sceneSprites;
 	SpriteAsset *_walkerSprite;
 
@@ -61,6 +70,7 @@
 	virtual void update();
 
 	M4InterfaceView *getInterface() { return (M4InterfaceView *)_interfaceSurface; };
+	M4SceneResources &getSceneResources() { return _sceneResources; };
 };
 
 } // End of namespace M4

Modified: scummvm/trunk/engines/m4/mads_scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_scene.cpp	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/mads_scene.cpp	2010-03-10 11:43:48 UTC (rev 48223)
@@ -40,7 +40,7 @@
 
 namespace M4 {
 
-MadsScene::MadsScene(MadsEngine *vm): Scene(vm) {
+MadsScene::MadsScene(MadsEngine *vm): _sceneResources(), Scene(vm, &_sceneResources) {
 	_vm = vm;
 
 	strcpy(_statusText, "");
@@ -55,7 +55,7 @@
  */
 void MadsScene::loadScene2(const char *aaName) {
 	// Load up the properties for the scene
-	_sceneInfo.load(_currentScene);
+	_sceneResources.load(_currentScene);
 
 	// Load scene walk paths
 	loadSceneCodes(_currentScene);
@@ -169,7 +169,7 @@
 	} else if (_vm->getGameType() == GType_RexNebular) {
 		// For Rex Nebular, the walk areas are part of the scene info
 		byte *destP = _walkSurface->getBasePtr(0, 0);
-		const byte *srcP = _sceneInfo.walkData;
+		const byte *srcP = _sceneResources.walkData;
 		byte runLength;
 		while ((runLength = *srcP++) != 0) {
 			Common::set_to(destP, destP + runLength, *srcP++);
@@ -448,7 +448,26 @@
 
 			if (_currentHotspot >= 0) {
 				if (_selectedRow < 0) {
-					
+					int verbId;
+					int hotspotCount = _madsVm->scene()->getSceneResources().hotspotCount;
+
+					if (_currentHotspot < hotspotCount) {
+						// Get the verb Id from the hotspot
+						verbId = 0;//selected hotspot
+					} else {
+						// Get the verb Id from the scene object
+						verbId = 0;//Scene_object[_currentHotspot - _hotspotCount].verbId;
+					}
+
+					if (verbId > 0) {
+						// Set the specified action
+						_currentAction = verbId;
+						appendVocab(_currentAction, true);
+					} else {
+						// Default to a standard 'walk to'
+						_currentAction = kVerbWalkTo;
+						strcat(_statusText, walkToStr);
+					}
 				}
 
 				//loc_21CE2
@@ -461,7 +480,7 @@
 
 /*--------------------------------------------------------------------------*/
 
-void MadsSceneInfo::load(int sId) {
+void MadsSceneResources::load(int sId) {
 	const char *sceneInfoStr = MADSResourceManager::getResourceName(RESPREFIX_RM, sId, ".DAT");
 	Common::SeekableReadStream *rawStream = _vm->_resourceManager->get(sceneInfoStr);
 	MadsPack sceneInfo(rawStream);

Modified: scummvm/trunk/engines/m4/mads_scene.h
===================================================================
--- scummvm/trunk/engines/m4/mads_scene.h	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/mads_scene.h	2010-03-10 11:43:48 UTC (rev 48223)
@@ -45,7 +45,8 @@
 	Common::Rect bounds;
 };
 
-class MadsSceneInfo {
+
+class MadsSceneResources: public SceneResources {
 public:
 	int sceneId;
 	int artFileNum;
@@ -59,8 +60,8 @@
 	int walkSize;
 	byte *walkData;
 
-	MadsSceneInfo() { walkSize = 0; walkData = NULL; }
-	~MadsSceneInfo() { delete walkData; }
+	MadsSceneResources() { walkSize = 0; walkData = NULL; }
+	~MadsSceneResources() { delete walkData; }
 	void load(int sceneId);	
 };
 
@@ -153,10 +154,10 @@
 class MadsScene : public Scene {
 private:
 	MadsEngine *_vm;
+	MadsSceneResources _sceneResources;
 	char _statusText[100];
 
 	MadsSceneLogic _sceneLogic;
-	MadsSceneInfo _sceneInfo;
 	SpriteAsset *_playerSprites;
 	SpriteAssetArray _sceneSprites;
 	SpriteSlot _spriteSlots[50];
@@ -192,6 +193,7 @@
 	void loadPlayerSprites(const char *prefix);
 
 	MadsInterfaceView *getInterface() { return (MadsInterfaceView *)_interfaceSurface; };
+	MadsSceneResources &getSceneResources() { return _sceneResources; };
 };
 
 } // End of namespace M4

Modified: scummvm/trunk/engines/m4/scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/scene.cpp	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/scene.cpp	2010-03-10 11:43:48 UTC (rev 48223)
@@ -39,12 +39,13 @@
 
 namespace M4 {
 
-Scene::Scene(MadsM4Engine *vm): View(vm, Common::Rect(0, 0, vm->_screen->width(), vm->_screen->height())) {
+Scene::Scene(MadsM4Engine *vm, SceneResources *res): View(vm, Common::Rect(0, 0, vm->_screen->width(), 
+			vm->_screen->height())), _sceneResources(res) {
 	_screenType = VIEWID_SCENE;
 
-	_sceneResources.hotspots = new HotSpotList();
-	_sceneResources.parallax = new HotSpotList();
-	_sceneResources.props = new HotSpotList();
+	_sceneResources->hotspots = new HotSpotList();
+	_sceneResources->parallax = new HotSpotList();
+	_sceneResources->props = new HotSpotList();
 	_backgroundSurface = new M4Surface();
 	_walkSurface = new M4Surface();
 	_palData = NULL;
@@ -100,23 +101,23 @@
 	Common::SeekableReadStream *sceneS = _vm->res()->get(filename);
 
 	if (sceneS != NULL) {
-		sceneS->read(_sceneResources.artBase, MAX_CHK_FILENAME_SIZE);
-		sceneS->read(_sceneResources.pictureBase, MAX_CHK_FILENAME_SIZE);
-		_sceneResources.hotspotCount = sceneS->readUint32LE();
-		_sceneResources.parallaxCount = sceneS->readUint32LE();
-		_sceneResources.propsCount = sceneS->readUint32LE();
-		_sceneResources.frontY = sceneS->readUint32LE();
-		_sceneResources.backY = sceneS->readUint32LE();
-		_sceneResources.frontScale = sceneS->readUint32LE();
-		_sceneResources.backScale = sceneS->readUint32LE();
+		sceneS->read(_sceneResources->artBase, MAX_CHK_FILENAME_SIZE);
+		sceneS->read(_sceneResources->pictureBase, MAX_CHK_FILENAME_SIZE);
+		_sceneResources->hotspotCount = sceneS->readUint32LE();
+		_sceneResources->parallaxCount = sceneS->readUint32LE();
+		_sceneResources->propsCount = sceneS->readUint32LE();
+		_sceneResources->frontY = sceneS->readUint32LE();
+		_sceneResources->backY = sceneS->readUint32LE();
+		_sceneResources->frontScale = sceneS->readUint32LE();
+		_sceneResources->backScale = sceneS->readUint32LE();
 		for (i = 0; i < 16; i++)
-			_sceneResources.depthTable[i] = sceneS->readUint16LE();
-		_sceneResources.railNodeCount = sceneS->readUint32LE();
+			_sceneResources->depthTable[i] = sceneS->readUint16LE();
+		_sceneResources->railNodeCount = sceneS->readUint32LE();
 
 		// Clear rails from previous scene
 		_vm->_rails->clearRails();
 
-		for (i = 0; i < _sceneResources.railNodeCount; i++) {
+		for (i = 0; i < _sceneResources->railNodeCount; i++) {
 			x = sceneS->readUint32LE();
 			y = sceneS->readUint32LE();
 			if (_vm->_rails->addRailNode(x, y, true) < 0) {
@@ -125,13 +126,13 @@
 		}
 
 		// Clear current hotspot lists
-		_sceneResources.hotspots->clear();
-		_sceneResources.parallax->clear();
-		_sceneResources.props->clear();
+		_sceneResources->hotspots->clear();
+		_sceneResources->parallax->clear();
+		_sceneResources->props->clear();
 
-		_sceneResources.hotspots->loadHotSpots(sceneS, _sceneResources.hotspotCount);
-		_sceneResources.parallax->loadHotSpots(sceneS, _sceneResources.parallaxCount);
-		_sceneResources.props->loadHotSpots(sceneS, _sceneResources.propsCount);
+		_sceneResources->hotspots->loadHotSpots(sceneS, _sceneResources->hotspotCount);
+		_sceneResources->parallax->loadHotSpots(sceneS, _sceneResources->parallaxCount);
+		_sceneResources->props->loadHotSpots(sceneS, _sceneResources->propsCount);
 
 		// Note that toss() deletes the MemoryReadStream
 		_vm->res()->toss(filename);
@@ -147,14 +148,14 @@
 	int hotspotCount = hotspotStream->readUint16LE();
 	delete hotspotStream;
 
-	_sceneResources.hotspotCount = hotspotCount;
+	_sceneResources->hotspotCount = hotspotCount;
 
 	hotspotStream = hotSpotData.getItemStream(1);
 
 	// Clear current hotspot lists
-	_sceneResources.hotspots->clear();
+	_sceneResources->hotspots->clear();
 
-	_sceneResources.hotspots->loadHotSpots(hotspotStream, _sceneResources.hotspotCount);
+	_sceneResources->hotspots->loadHotSpots(hotspotStream, _sceneResources->hotspotCount);
 
 	delete hotspotStream;
 }
@@ -204,19 +205,19 @@
 
 	// taken from set_walker_scaling() in adv_walk.cpp. A proper implementation will need
 	// to store these in global variables
-	int minScaling = FixedDiv(_sceneResources.backScale << 16, 100 << 16);
-	int maxScaling = FixedDiv(_sceneResources.frontScale << 16, 100 << 16);
+	int minScaling = FixedDiv(_sceneResources->backScale << 16, 100 << 16);
+	int maxScaling = FixedDiv(_sceneResources->frontScale << 16, 100 << 16);
 	int scaler;
 
 	_vm->_actor->setWalkerDirection(kFacingSouthEast);
 	//_vm->_actor->setWalkerPalette();
 
 	// taken from set_walker_scaling() in adv_walk.cpp
-	if (_sceneResources.frontY == _sceneResources.backY)
+	if (_sceneResources->frontY == _sceneResources->backY)
 		scaler = 0;
 	else
 		scaler = FixedDiv(maxScaling - minScaling,
-				 (_sceneResources.frontY << 16) - (_sceneResources.backY << 16));
+				 (_sceneResources->frontY << 16) - (_sceneResources->backY << 16));
 
 	// FIXME: For now, we (incorrectly) scale the walker to 50% of the scene's max scaling
 	_vm->_actor->setWalkerScaling(scaler / 2);
@@ -232,19 +233,19 @@
 	int i = 0;
 	HotSpot *currentHotSpot;
 	// hotspots (green)
-	for (i = 0; i < _sceneResources.hotspotCount; i++) {
-		currentHotSpot = _sceneResources.hotspots->get(i);
+	for (i = 0; i < _sceneResources->hotspotCount; i++) {
+		currentHotSpot = _sceneResources->hotspots->get(i);
 		_backgroundSurface->frameRect(currentHotSpot->getRect(), _vm->_palette->GREEN);
 	}
 	if (_vm->isM4()) {
 		// parallax (yellow)
-		for (i = 0; i < _sceneResources.parallaxCount; i++) {
-			currentHotSpot = _sceneResources.parallax->get(i);
+		for (i = 0; i < _sceneResources->parallaxCount; i++) {
+			currentHotSpot = _sceneResources->parallax->get(i);
 			_backgroundSurface->frameRect(currentHotSpot->getRect(), _vm->_palette->YELLOW);
 		}
 		// props (red)
-		for (i = 0; i < _sceneResources.propsCount; i++) {
-			currentHotSpot = _sceneResources.props->get(i);
+		for (i = 0; i < _sceneResources->propsCount; i++) {
+			currentHotSpot = _sceneResources->props->get(i);
 			_backgroundSurface->frameRect(currentHotSpot->getRect(), _vm->_palette->RED);
 		}
 	}

Modified: scummvm/trunk/engines/m4/scene.h
===================================================================
--- scummvm/trunk/engines/m4/scene.h	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/scene.h	2010-03-10 11:43:48 UTC (rev 48223)
@@ -58,7 +58,8 @@
 	kVerbWalkTo	= 13
 };
 
-struct SceneResources {
+class SceneResources {
+public:
 	char artBase[MAX_CHK_FILENAME_SIZE];
 	char pictureBase[MAX_CHK_FILENAME_SIZE];
 	int32 hotspotCount;
@@ -89,9 +90,9 @@
 	M4Surface *_walkSurface;
 	RGBList *_palData;
 	RGBList *_interfacePal;
-	SceneResources _sceneResources;
+	SceneResources *_sceneResources;
 public:
-	Scene(MadsM4Engine *vm);
+	Scene(MadsM4Engine *vm, SceneResources *res);
 	virtual ~Scene();
 
 	// Methods that differ between engines
@@ -122,7 +123,7 @@
 	void hideInterface();
 	void showMADSV2TextBox(char *text, int x, int y, char *faceName);
 	GameInterfaceView *getInterface() { return _interfaceSurface; };
-	SceneResources getSceneResources() { return _sceneResources; };
+	SceneResources &getSceneResources() { return *_sceneResources; };
 
 	void onRefresh(RectList *rects, M4Surface *destSurface);
 	bool onEvent(M4EventType eventType, int32 param1, int x, int y, bool &captureEvents);

Modified: scummvm/trunk/engines/m4/staticres.cpp
===================================================================
--- scummvm/trunk/engines/m4/staticres.cpp	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/staticres.cpp	2010-03-10 11:43:48 UTC (rev 48223)
@@ -41,6 +41,7 @@
 const char *lookAroundStr = "Look around";
 const char *toStr = "to ";
 const char *useStr = "Use ";
+const char *walkToStr = "Walk to ";
 
 VerbInit verbList[10] = {
 	{kVerbLook, 2, 0},

Modified: scummvm/trunk/engines/m4/staticres.h
===================================================================
--- scummvm/trunk/engines/m4/staticres.h	2010-03-10 11:26:27 UTC (rev 48222)
+++ scummvm/trunk/engines/m4/staticres.h	2010-03-10 11:43:48 UTC (rev 48223)
@@ -39,6 +39,7 @@
 extern const char *lookAroundStr;
 extern const char *toStr;
 extern const char *useStr;
+extern const char *walkToStr;
 
 struct VerbInit {
 	int verb;


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