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

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sun Feb 21 02:18:04 CET 2010


Revision: 48099
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48099&view=rev
Author:   dreammaster
Date:     2010-02-21 01:18:03 +0000 (Sun, 21 Feb 2010)

Log Message:
-----------
Implemented some of the sprite animations loading logic for the first scene (no display yet)

Modified Paths:
--------------
    scummvm/trunk/engines/m4/mads_logic.cpp
    scummvm/trunk/engines/m4/mads_logic.h
    scummvm/trunk/engines/m4/resource.cpp
    scummvm/trunk/engines/m4/scene.cpp
    scummvm/trunk/engines/m4/scene.h

Modified: scummvm/trunk/engines/m4/mads_logic.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_logic.cpp	2010-02-21 00:50:27 UTC (rev 48098)
+++ scummvm/trunk/engines/m4/mads_logic.cpp	2010-02-21 01:18:03 UTC (rev 48099)
@@ -31,7 +31,7 @@
 
 /*--------------------------------------------------------------------------*/
 
-const char *MadsSceneLogic::formAnimName(char sepChar, int suffixNum) {
+const char *MadsSceneLogic::formAnimName(char sepChar, int16 suffixNum) {
 	return MADSResourceManager::getResourceName(sepChar, _sceneNumber, EXTTYPE_NONE, NULL, suffixNum);
 }
 
@@ -71,6 +71,15 @@
 
 /*--------------------------------------------------------------------------*/
 
+uint16 MadsSceneLogic::loadSpriteSet(uint16 suffixNum, uint16 sepChar) {
+	assert(sepChar < 256);
+	const char *resName = formAnimName((char)sepChar, (int16)suffixNum);
+	return _madsVm->scene()->loadSceneSpriteSet(resName);
+}
+
+
+/*--------------------------------------------------------------------------*/
+
 /**
  * FIXME:
  * Currently I'm only working at providing manual implementation of the first Rex Nebular scene.
@@ -96,7 +105,15 @@
 }
 
 void MadsSceneLogic::enterScene() {
-
+	for (int i = 1; i <= 7; ++i)
+		_spriteIndexes[i - 1] = loadSpriteSet(i, 'x');
+	_spriteIndexes[7] = loadSpriteSet(0xFFFF, 'm');
+	_spriteIndexes[8] = loadSpriteSet(1, 'b');
+	_spriteIndexes[9] = loadSpriteSet(2, 'b');
+	_spriteIndexes[10] = loadSpriteSet(0, 'a');
+	_spriteIndexes[11] = loadSpriteSet(1, 'a');
+	_spriteIndexes[12] = loadSpriteSet(8, 'x');
+	_spriteIndexes[13] = loadSpriteSet(0, 'x');
 }
 
 void MadsSceneLogic::doAction() {

Modified: scummvm/trunk/engines/m4/mads_logic.h
===================================================================
--- scummvm/trunk/engines/m4/mads_logic.h	2010-02-21 00:50:27 UTC (rev 48098)
+++ scummvm/trunk/engines/m4/mads_logic.h	2010-02-21 01:18:03 UTC (rev 48099)
@@ -34,11 +34,13 @@
 class MadsSceneLogic {
 private:
 	// Library interface methods
+	uint16 loadSpriteSet(uint16 suffixNum, uint16 sepChar);
 private:
 	int _sceneNumber;
+	uint16 _spriteIndexes[50];
 
 	// Support functions
-	const char *formAnimName(char sepChar, int suffixNum);
+	const char *formAnimName(char sepChar, int16 suffixNum);
 	void getSceneSpriteSet();
 	void getAnimName();
 public:

Modified: scummvm/trunk/engines/m4/resource.cpp
===================================================================
--- scummvm/trunk/engines/m4/resource.cpp	2010-02-21 00:50:27 UTC (rev 48098)
+++ scummvm/trunk/engines/m4/resource.cpp	2010-02-21 01:18:03 UTC (rev 48099)
@@ -334,7 +334,7 @@
 	strcat(resourceName, asciiStr);
 
 	// Add in the index specified
-	if (index > 0)
+	if (index >= 0)
 		sprintf(resourceName + strlen(resourceName), "%d", index);
 
 	// Add in any suffix

Modified: scummvm/trunk/engines/m4/scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/scene.cpp	2010-02-21 00:50:27 UTC (rev 48098)
+++ scummvm/trunk/engines/m4/scene.cpp	2010-02-21 01:18:03 UTC (rev 48099)
@@ -608,10 +608,18 @@
 	// Handle common scene setting
 	Scene::loadScene(sceneNumber);
 
+	// Signal the script engine what scene is to be active
 	_sceneLogic.selectScene(sceneNumber);
-	_vm->globals()->addVisitedScene(sceneNumber);
 	_sceneLogic.setupScene();
 
+	// Add the scene if necessary to the list of scenes that have been visited
+	_vm->globals()->addVisitedScene(sceneNumber);
+
+
+	// Do any scene specific setup
+	_sceneLogic.enterScene();
+
+	/* Existing code that eventually needs to be replaced with the proper MADS code */
 	// Set system palette entries
 	_vm->_palette->blockRange(0, 7);
 	RGB8 sysColors[3] = { {0x1f<<2, 0x2d<<2, 0x31<<2, 0}, {0x24<<2, 0x37<<2, 0x3a<<2, 0},
@@ -787,6 +795,23 @@
 	_sceneSprites[0]->getFrame(1)->copyTo(this, 120, 90, 0);
 }
 
+int MadsScene::loadSceneSpriteSet(const char *setName) {
+	char resName[100];
+	strcpy(resName, setName);
+
+	// Append a '.SS' if it doesn't alreayd have an extension
+	if (!strchr(resName, '.'))
+		strcat(resName, ".SS");
+
+	Common::SeekableReadStream *data = _vm->res()->get(resName);
+	SpriteAsset *spriteSet = new SpriteAsset(_vm, data, data->size(), resName);
+	spriteSet->translate(_vm->_palette);
+	_vm->res()->toss(resName);
+
+	_sceneSprites.push_back(spriteSet);
+	return _sceneSprites.size() - 1;
+}
+
 void MadsScene::loadPlayerSprites(const char *prefix) {
 	const char suffixList[8] = { '8', '9', '6', '3', '2', '7', '4', '1' };
 	char setName[80];
@@ -800,12 +825,7 @@
 		*digitP = suffixList[idx];
 
 		if (_vm->res()->resourceExists(setName)) {
-			Common::SeekableReadStream *data = _vm->res()->get(setName);
-			SpriteAsset *playerSprites = new SpriteAsset(_vm, data, data->size(), setName);
-			playerSprites->translate(_vm->_palette);
-			_vm->res()->toss(setName);
-
-			_sceneSprites.push_back(playerSprites);
+			loadSceneSpriteSet(setName);
 			return;
 		}
 	}

Modified: scummvm/trunk/engines/m4/scene.h
===================================================================
--- scummvm/trunk/engines/m4/scene.h	2010-02-21 00:50:27 UTC (rev 48098)
+++ scummvm/trunk/engines/m4/scene.h	2010-02-21 01:18:03 UTC (rev 48099)
@@ -189,6 +189,7 @@
 	virtual void setStatusText(const char *text);
 	virtual void update();
 
+	int loadSceneSpriteSet(const char *setName);
 	void loadPlayerSprites(const char *prefix);
 
 	MadsInterfaceView *getInterface() { return (MadsInterfaceView *)_interfaceSurface; };


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