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

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Sun Nov 15 09:22:57 CET 2009


Revision: 45912
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45912&view=rev
Author:   dreammaster
Date:     2009-11-15 08:22:57 +0000 (Sun, 15 Nov 2009)

Log Message:
-----------
Added display of the rotating inventory objects

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

Modified: scummvm/trunk/engines/m4/mads_menus.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_menus.cpp	2009-11-15 08:22:14 UTC (rev 45911)
+++ scummvm/trunk/engines/m4/mads_menus.cpp	2009-11-15 08:22:57 UTC (rev 45912)
@@ -309,6 +309,9 @@
 		vm->_mouse->cursorOn();
 		vm->_viewManager->addView(vm->_scene);
 		vm->_scene->loadScene(101);
+
+		// **DEBUG** - set the default object
+		vm->_scene->setSelectedObject(48);
 		return;
 
 	case SHOW_INTRO:

Modified: scummvm/trunk/engines/m4/scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/scene.cpp	2009-11-15 08:22:14 UTC (rev 45911)
+++ scummvm/trunk/engines/m4/scene.cpp	2009-11-15 08:22:57 UTC (rev 45912)
@@ -46,6 +46,7 @@
 	_codeSurface = new M4Surface();
 	_madsInterfaceSurface = new M4Surface();
 	_sceneSprites = NULL;
+	_objectSprites = NULL;
 	_palData = NULL;
 	_interfacePal = NULL;
 	_inverseColorTable = NULL;
@@ -68,6 +69,8 @@
 
 	if (_sceneSprites)
 		delete _sceneSprites;
+	if (_objectSprites)
+		delete _objectSprites;
 
 	_vm->_palette->deleteAllRanges();
 
@@ -441,12 +444,17 @@
 
 }
 
+static const int FRAME_SPEED = 8;
+static const int INVENTORY_X = 160;
+static const int INVENTORY_Y = 159;
+
 void Scene::update() {
 	// TODO: Needs a proper implementation
 	// NOTE: Don't copy the background when in M4 mode or WoodScript anims won't be shown
 	if (!_vm->isM4()) {
 		_backgroundSurface->copyTo(this);
 
+		// Handle display of any status text
 		if (_statusText[0]) {
 			// Text colors are inverted in Dragonsphere
 			if (_vm->getGameType() == GType_DragonSphere)
@@ -457,6 +465,21 @@
 			_vm->_font->setFont(FONT_MAIN_MADS);
 			_vm->_font->writeString(this, _statusText, (width() - _vm->_font->getWidth(_statusText)) / 2, 142, 0);
 		}
+
+		_madsInterfaceSurface->copyTo(this, 0, this->height() - _madsInterfaceSurface->height());
+
+		if (_objectSprites) {
+			// Display object sprite. Note that the frame number isn't used directly, because it would result
+			// in too fast an animation
+			M4Sprite *spr = _objectSprites->getFrame(_objectFrameNumber / FRAME_SPEED);
+			spr->copyTo(this, INVENTORY_X, INVENTORY_Y, 0);
+
+			if (!_vm->_globals->invObjectsStill) {
+				// If objetcs are to animated, move to the next frame
+				if (++_objectFrameNumber >= (_objectSprites->getCount() * FRAME_SPEED))
+					_objectFrameNumber = 0;
+			}
+		}
 	}
 }
 
@@ -667,4 +690,31 @@
 	boxSprites->getFrame(bottomRight)->copyTo(_backgroundSurface, curX, curY + 1);
 }
 
+/*--------------------------------------------------------------------------*/
+
+void Scene::setSelectedObject(int objectNumber) {
+	VALIDATE_MADS;
+
+	// Load inventory resource
+	if (_objectSprites) {
+		_vm->_palette->deleteRange(_objectPalData);
+		delete _objectSprites;
+	}
+
+	char resName[80];
+	sprintf(resName, "*OB%.3dI.SS", objectNumber);
+
+	Common::SeekableReadStream *data = _vm->res()->get(resName);
+	_objectSprites = new SpriteAsset(_vm, data, data->size(), resName);
+	_vm->res()->toss(resName);
+
+	// Slot it into available palette space
+	_objectPalData = _objectSprites->getRgbList();
+	_vm->_palette->addRange(_objectPalData);
+	_objectSprites->translate(_objectPalData, true);
+
+	_objectFrameNumber = 0;
+	_selectedObject = objectNumber;
+}
+
 } // End of namespace M4

Modified: scummvm/trunk/engines/m4/scene.h
===================================================================
--- scummvm/trunk/engines/m4/scene.h	2009-11-15 08:22:14 UTC (rev 45911)
+++ scummvm/trunk/engines/m4/scene.h	2009-11-15 08:22:57 UTC (rev 45912)
@@ -102,6 +102,8 @@
 	void onRefresh(RectList *rects, M4Surface *destSurface);
 	bool onEvent(M4EventType eventType, int param1, int x, int y, bool &captureEvents);
 
+	void setSelectedObject(int objectNumber);
+
 private:
 	int _currentScene;
 	M4Surface *_backgroundSurface;
@@ -116,6 +118,12 @@
 	SpriteAsset *_walkerSprite;
 	char _statusText[100];
 
+	// Inventory related fields
+	int _selectedObject;
+	SpriteAsset *_objectSprites;
+	RGBList *_objectPalData;
+	int _objectFrameNumber;
+
 	void nextCommonCursor();
 };
 


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