[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