[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