[Scummvm-cvs-logs] SF.net SVN: scummvm:[42070] scummvm/branches/gsoc2009-draci/engines/draci/ game.cpp
dkasak13 at users.sourceforge.net
dkasak13 at users.sourceforge.net
Fri Jul 3 19:54:13 CEST 2009
Revision: 42070
http://scummvm.svn.sourceforge.net/scummvm/?rev=42070&view=rev
Author: dkasak13
Date: 2009-07-03 17:54:13 +0000 (Fri, 03 Jul 2009)
Log Message:
-----------
Added support for loading room overlays to Game::changeRoom().
Modified Paths:
--------------
scummvm/branches/gsoc2009-draci/engines/draci/game.cpp
Modified: scummvm/branches/gsoc2009-draci/engines/draci/game.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/game.cpp 2009-07-03 17:53:05 UTC (rev 42069)
+++ scummvm/branches/gsoc2009-draci/engines/draci/game.cpp 2009-07-03 17:54:13 UTC (rev 42070)
@@ -29,6 +29,7 @@
#include "draci/game.h"
#include "draci/barchive.h"
#include "draci/script.h"
+#include "draci/animation.h"
namespace Draci {
@@ -190,12 +191,12 @@
}
void Game::changeRoom(uint16 roomNum) {
-
+
// Convert to real index (indexes begin with 1 in the data files)
roomNum -= 1;
BAFile *f;
- f = _vm->_roomsArchive->getFile(roomNum);
+ f = _vm->_roomsArchive->getFile(roomNum * 4);
Common::MemoryReadStream roomReader(f->_data, f->_length);
roomReader.readUint32LE(); // Pointer to room program, not used
@@ -219,6 +220,30 @@
roomReader.read(&_currentRoom._persStep, 12);
_currentRoom._escRoom = roomReader.readByte();
_currentRoom._numGates = roomReader.readByte();
+
+ f = _vm->_paletteArchive->getFile(_currentRoom._palette - 1);
+ _vm->_screen->setPalette(f->_data, 0, kNumColours);
+
+ uint x, y, z, num;
+
+ f = _vm->_roomsArchive->getFile(roomNum * 4 + 2);
+ Common::MemoryReadStream overlayReader(f->_data, f->_length);
+ BAFile *overlayFile;
+
+ for (uint i = 0; i < _currentRoom._numMasks; i++) {
+
+ num = overlayReader.readUint16LE();
+ x = overlayReader.readUint16LE();
+ y = overlayReader.readUint16LE();
+ z = overlayReader.readByte();
+
+ overlayFile = _vm->_overlaysArchive->getFile(num - 1);
+ Sprite *sp = new Sprite(overlayFile->_data, overlayFile->_length, x, y, z, true);
+
+ _vm->_anims->addOverlay(sp, z);
+ }
+
+ _vm->_screen->getSurface()->markDirty();
}
Game::~Game() {
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