[Scummvm-cvs-logs] SF.net SVN: scummvm: [28524] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sat Aug 11 15:07:21 CEST 2007


Revision: 28524
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28524&view=rev
Author:   peres001
Date:     2007-08-11 06:07:21 -0700 (Sat, 11 Aug 2007)

Log Message:
-----------
Overhaul of background/mask/path handling:
- added new BackgroundInfo structure
- added helper functions to aid management of BackgroundInfo. Engine is now responsible for allocation/deallocation.
- simplified loading and handling of background resources.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/disk.h
    scummvm/trunk/engines/parallaction/disk_br.cpp
    scummvm/trunk/engines/parallaction/disk_ns.cpp
    scummvm/trunk/engines/parallaction/graphics.cpp
    scummvm/trunk/engines/parallaction/location.cpp
    scummvm/trunk/engines/parallaction/menu.cpp
    scummvm/trunk/engines/parallaction/parallaction.cpp
    scummvm/trunk/engines/parallaction/parallaction.h
    scummvm/trunk/engines/parallaction/walk.cpp

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/disk.h	2007-08-11 13:07:21 UTC (rev 28524)
@@ -39,6 +39,7 @@
 class Font;
 
 struct Cnv;
+struct BackgroundInfo;
 
 class Disk {
 
@@ -58,8 +59,8 @@
 	virtual Font* loadFont(const char* name) = 0;
 	virtual Graphics::Surface* loadStatic(const char* name) = 0;
 	virtual Cnv* loadFrames(const char* name) = 0;
-	virtual void loadSlide(const char *filename) = 0;
-	virtual void loadScenery(const char* background, const char* mask) = 0;
+	virtual BackgroundInfo* loadSlide(const char *filename) = 0;
+	virtual BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path) = 0;
 	virtual Table* loadTable(const char* name) = 0;
 	virtual Common::SeekableReadStream* loadMusic(const char* name) = 0;
 	virtual Common::ReadStream* loadSound(const char* name) = 0;
@@ -128,10 +129,10 @@
 	Cnv* loadExternalCnv(const char *filename);
 	Cnv* loadCnv(const char *filename);
 	Graphics::Surface *loadExternalStaticCnv(const char *filename);
-	void loadBackground(const char *filename);
-	void loadMaskAndPath(const char *name);
+	BackgroundInfo* loadBackground(const char *filename);
+	void loadMaskAndPath(const char *name, BackgroundInfo *info);
 	void parseDepths(Common::SeekableReadStream &stream);
-	void parseBackground(Common::SeekableReadStream &stream);
+	void parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info);
 	Font *createFont(const char *name, Cnv* cnv);
 
 protected:
@@ -150,8 +151,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	void loadSlide(const char *filename);
-	void loadScenery(const char* background, const char* mask);
+	BackgroundInfo* loadSlide(const char *filename);
+	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
 	Table* loadTable(const char* name);
 	Common::SeekableReadStream* loadMusic(const char* name);
 	Common::ReadStream* loadSound(const char* name);
@@ -167,9 +168,9 @@
 	void unpackBitmap(byte *dst, byte *src, uint16 numFrames, uint16 bytesPerPlane, uint16 height);
 	Common::SeekableReadStream *openArchivedFile(const char* name, bool errorOnFileNotFound = false);
 	Font *createFont(const char *name, Common::SeekableReadStream &stream);
-	void loadMask(const char *name);
-	void loadPath(const char *name);
-	void loadBackground(const char *name);
+	void loadMask(const char *name, BackgroundInfo* info);
+	void loadPath(const char *name, BackgroundInfo* info);
+	BackgroundInfo* loadBackground(const char *name);
 
 public:
 	AmigaDisk_ns(Parallaction *vm);
@@ -184,8 +185,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	void loadSlide(const char *filename);
-	void loadScenery(const char* background, const char* mask);
+	BackgroundInfo* loadSlide(const char *filename);
+	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
 	Table* loadTable(const char* name);
 	Common::SeekableReadStream* loadMusic(const char* name);
 	Common::ReadStream* loadSound(const char* name);
@@ -218,8 +219,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	void loadSlide(const char *filename);
-	void loadScenery(const char* background, const char* mask);
+	BackgroundInfo* loadSlide(const char *filename);
+	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
 	Table* loadTable(const char* name);
 	Common::SeekableReadStream* loadMusic(const char* name);
 	Common::ReadStream* loadSound(const char* name);

Modified: scummvm/trunk/engines/parallaction/disk_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_br.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/disk_br.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -133,15 +133,15 @@
 
 
 //	there are no Slide resources in Big Red Adventure
-void DosDisk_br::loadSlide(const char *name) {
+BackgroundInfo* DosDisk_br::loadSlide(const char *name) {
 	debugC(5, kDebugDisk, "DosDisk_br::loadSlide");
 
-	return;
+	return 0;
 }
 
-void DosDisk_br::loadScenery(const char *name, const char *mask) {
+BackgroundInfo* DosDisk_br::loadScenery(const char *name, const char *mask, const char* path) {
 	debugC(5, kDebugDisk, "DosDisk_br::loadScenery");
-	return;
+	return 0;
 }
 
 Table* DosDisk_br::loadTable(const char* name) {

Modified: scummvm/trunk/engines/parallaction/disk_ns.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_ns.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/disk_ns.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -562,7 +562,7 @@
 }
 
 
-void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream) {
+void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info) {
 
 	byte tmp[3];
 
@@ -570,11 +570,9 @@
 		tmp[0] = stream.readByte();
 		tmp[1] = stream.readByte();
 		tmp[2] = stream.readByte();
-		_vm->_gfx->_palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
+		info->palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
 	}
 
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-
 	parseDepths(stream);
 
 	for (uint32 _si = 0; _si < 6; _si++) {
@@ -587,30 +585,25 @@
 
 }
 
-void DosDisk_ns::loadBackground(const char *filename) {
+BackgroundInfo* DosDisk_ns::loadBackground(const char *filename) {
 
 	if (!_resArchive.openArchivedFile(filename))
 		errorFileNotFound(filename);
 
-	parseBackground(_resArchive);
+	BackgroundInfo *info = new BackgroundInfo;
+	info->width = _vm->_screenWidth;	// 320
+	info->height = _vm->_screenHeight;	// 200
 
-	Graphics::Surface *bg = new Graphics::Surface;
-	bg->create(_vm->_screenWidth, _vm->_screenHeight, 1);
+	parseBackground(_resArchive, info);
 
-	MaskBuffer *mask = new MaskBuffer;
-	mask->create(_vm->_screenWidth, _vm->_screenHeight);
+	info->bg.create(info->width, info->height, 1);
+	info->mask.create(info->width, info->height);
+	info->path.create(info->width, info->height);
 
-	PathBuffer *path = new PathBuffer;
-	path->create(_vm->_screenWidth, _vm->_screenHeight);
-
 	Graphics::PackBitsReadStream stream(_resArchive);
-	unpackBackground(&stream, (byte*)bg->pixels, mask->data, path->data);
+	unpackBackground(&stream, (byte*)info->bg.pixels, info->mask.data, info->path.data);
 
-	_vm->_gfx->setBackground(bg);
-	_vm->_gfx->setMask(mask);
-	_vm->setPath(path);
-
-	return;
+	return info;
 }
 
 //
@@ -619,46 +612,41 @@
 //	mask and path are normally combined (via OR) into the background picture itself
 //	read the comment on the top of this file for more
 //
-void DosDisk_ns::loadMaskAndPath(const char *name) {
+void DosDisk_ns::loadMaskAndPath(const char *name, BackgroundInfo *info) {
 	char path[PATH_LEN];
 	sprintf(path, "%s.msk", name);
 
 	if (!_resArchive.openArchivedFile(path))
 		errorFileNotFound(name);
 
-	MaskBuffer *mask = new MaskBuffer;
-	mask->create(_vm->_screenWidth, _vm->_screenHeight);
-
-	PathBuffer *pathBuf = new PathBuffer;
-	pathBuf->create(_vm->_screenWidth, _vm->_screenHeight);
-
 	parseDepths(_resArchive);
 
-	_resArchive.read(pathBuf->data, pathBuf->size);
-	_resArchive.read(mask->data, mask->size);
+	info->path.create(info->width, info->height);
+	_resArchive.read(info->path.data, info->path.size);
 
-	_vm->_gfx->setMask(mask);
-	_vm->setPath(pathBuf);
+	info->mask.create(info->width, info->height);
+	_resArchive.read(info->mask.data, info->mask.size);
 
 	return;
 }
 
-void DosDisk_ns::loadSlide(const char *filename) {
+BackgroundInfo* DosDisk_ns::loadSlide(const char *filename) {
 	char path[PATH_LEN];
 	sprintf(path, "%s.slide", filename);
-	loadBackground(path);
+	return loadBackground(path);
 }
 
-void DosDisk_ns::loadScenery(const char *name, const char *mask) {
-	char path[PATH_LEN];
-	sprintf(path, "%s.dyn", name);
-	loadBackground(path);
+BackgroundInfo* DosDisk_ns::loadScenery(const char *name, const char *mask, const char* path) {
+	char filename[PATH_LEN];
+	sprintf(filename, "%s.dyn", name);
+	BackgroundInfo *info = loadBackground(filename);
 
 	if (mask != NULL) {
 		// load external masks and paths only for certain locations
-		loadMaskAndPath(mask);
+		loadMaskAndPath(mask, info);
 	}
 
+	return info;
 }
 
 Table* DosDisk_ns::loadTable(const char* name) {
@@ -1188,15 +1176,20 @@
 };
 
 
-void AmigaDisk_ns::loadBackground(const char *name) {
+BackgroundInfo* AmigaDisk_ns::loadBackground(const char *name) {
 
 	Common::SeekableReadStream *s = openArchivedFile(name, true);
 
-	Graphics::Surface *surf = new Graphics::Surface;
 	byte *pal;
-	BackgroundDecoder decoder(*s, *surf, pal, _vm->_gfx->_palettefx);
+
+	BackgroundInfo* info = new BackgroundInfo;
+
+	BackgroundDecoder decoder(*s, info->bg, pal, _vm->_gfx->_palettefx);
 	decoder.decode();
 
+	info->width = info->bg.w;
+	info->height = info->bg.h;
+
 	byte *p = pal;
 	for (uint i = 0; i < 32; i++) {
 		byte r = *p >> 2;
@@ -1205,21 +1198,18 @@
 		p++;
 		byte b = *p >> 2;
 		p++;
-		_vm->_gfx->_palette.setEntry(i, r, g, b);
-
+		info->palette.setEntry(i, r, g, b);
 	}
 
 	free(pal);
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-	_vm->_gfx->setBackground(surf);
 
 	delete s;
 
-	return;
+	return info;
 
 }
 
-void AmigaDisk_ns::loadMask(const char *name) {
+void AmigaDisk_ns::loadMask(const char *name, BackgroundInfo* info) {
 	debugC(5, kDebugDisk, "AmigaDisk_ns::loadMask(%s)", name);
 
 	char path[PATH_LEN];
@@ -1248,18 +1238,16 @@
 	s->seek(0x126, SEEK_SET);	// HACK: skipping IFF/ILBM header should be done by analysis, not magic
 	Graphics::PackBitsReadStream stream(*s);
 
-	MaskBuffer *mask = new MaskBuffer;
-	mask->create(_vm->_screenWidth, _vm->_screenHeight);
-	stream.read(mask->data, mask->size);
-	buildMask(mask->data);
-	_vm->_gfx->setMask(mask);
+	info->mask.create(info->width, info->height);
+	stream.read(info->mask.data, info->mask.size);
+	buildMask(info->mask.data);
 
 	delete s;
 
 	return;
 }
 
-void AmigaDisk_ns::loadPath(const char *name) {
+void AmigaDisk_ns::loadPath(const char *name, BackgroundInfo* info) {
 
 	char path[PATH_LEN];
 	sprintf(path, "%s.path", name);
@@ -1273,49 +1261,49 @@
 
 	Graphics::PackBitsReadStream stream(*s);
 
-	PathBuffer *buf = new PathBuffer;
-	buf->create(_vm->_screenWidth, _vm->_screenHeight);
-	stream.read(buf->data, buf->size);
-	_vm->setPath(buf);
+	info->path.create(info->width, info->height);
+	stream.read(info->path.data, info->path.size);
 
 	delete s;
 
 	return;
 }
 
-void AmigaDisk_ns::loadScenery(const char* background, const char* mask) {
+BackgroundInfo* AmigaDisk_ns::loadScenery(const char* background, const char* mask, const char* path) {
 	debugC(1, kDebugDisk, "AmigaDisk_ns::loadScenery '%s', '%s'", background, mask);
 
-	char path[PATH_LEN];
-	sprintf(path, "%s.bkgnd", background);
+	char filename[PATH_LEN];
+	sprintf(filename, "%s.bkgnd", background);
 
-	loadBackground(path);
+	BackgroundInfo* info = loadBackground(filename);
 
 	if (mask == NULL) {
-		loadMask(background);
-		loadPath(background);
+		loadMask(background, info);
+		loadPath(background, info);
 	} else {
-		loadMask(mask);
-		loadPath(mask);
+		loadMask(mask, info);
+		loadPath(mask, info);
 	}
 
-	return;
+	return info;
 }
 
-void AmigaDisk_ns::loadSlide(const char *name) {
+BackgroundInfo*  AmigaDisk_ns::loadSlide(const char *name) {
 	debugC(1, kDebugDisk, "AmigaDisk_ns::loadSlide '%s'", name);
 
 	char path[PATH_LEN];
 	sprintf(path, "slides/%s", name);
 	Common::SeekableReadStream *s = openArchivedFile(path, false);
+
+	BackgroundInfo *info;
 	if (s)
-		loadBackground(path);
+		info = loadBackground(path);
 	else
-		loadBackground(name);
+		info = loadBackground(name);
 
 	delete s;
 
-	return;
+	return info;
 }
 
 Cnv* AmigaDisk_ns::loadFrames(const char* name) {

Modified: scummvm/trunk/engines/parallaction/graphics.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/graphics.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -765,21 +765,11 @@
 
 
 void Gfx::setBackground(Graphics::Surface *surface) {
-	if (_buffers[kBit2]) {
-		_buffers[kBit2]->free();
-		delete _buffers[kBit2];
-	}
-
 	_buffers[kBit2] = surface;
 	copyScreen(kBit2, kBitBack);
 }
 
 void Gfx::setMask(MaskBuffer *buffer) {
-	if (_depthMask) {
-		_depthMask->free();
-		delete _depthMask;
-	}
-
 	_depthMask = buffer;
 }
 
@@ -882,21 +872,11 @@
 
 Gfx::~Gfx() {
 
-	if (_depthMask) {
-		_depthMask->free();
-		delete _depthMask;
-	}
-
 	_buffers[kBitFront]->free();
 	delete _buffers[kBitFront];
 	_buffers[kBitBack]->free();
 	delete _buffers[kBitBack];
 
-	if (_buffers[kBit2]) {
-		_buffers[kBit2]->free();
-		delete _buffers[kBit2];
-	}
-
 	delete _fonts[kFontDialogue];
 	delete _fonts[kFontLabel];
 	delete _fonts[kFontMenu];

Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/location.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -235,6 +235,39 @@
 
 }
 
+void Parallaction::freeBackground() {
+
+	if (!_backgroundInfo)
+		return;
+
+	_backgroundInfo->bg.free();
+	_backgroundInfo->mask.free();
+	_backgroundInfo->path.free();
+	delete _backgroundInfo;
+
+	_backgroundInfo = 0;
+
+}
+
+void Parallaction::setBackground(const char *background, const char *mask, const char *path) {
+
+	freeBackground();
+
+	_backgroundInfo = _disk->loadScenery(background, mask, path);
+
+	_gfx->setPalette(_backgroundInfo->palette);
+	_gfx->_palette.clone(_backgroundInfo->palette);
+	_gfx->setBackground(&_backgroundInfo->bg);
+
+	if (_backgroundInfo->mask.data)
+		_gfx->setMask(&_backgroundInfo->mask);
+
+	if (_backgroundInfo->path.data)
+		setPath(&_backgroundInfo->path);
+
+	return;
+}
+
 void Parallaction::switchBackground(const char* background, const char* mask) {
 //	printf("switchBackground(%s)", name);
 
@@ -253,7 +286,7 @@
 		_gfx->updateScreen();
 	}
 
-	_disk->loadScenery(background, mask);
+	setBackground(background, mask, mask);
 
 	return;
 }
@@ -264,21 +297,22 @@
 
 void Parallaction::showSlide(const char *name) {
 
-	_disk->loadSlide(name);
-	_gfx->setPalette(_gfx->_palette);
-	_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
+	BackgroundInfo *info;
 
-	debugC(1, kDebugLocation, "changeLocation: new background set");
+	info = _disk->loadSlide(name);
 
-	_gfx->setFont(kFontMenu);
+	// TODO: avoid using screen buffers for displaying slides. Using a generic buffer
+	// allows for positioning of graphics as needed by Big Red Adventure.
+	// The main problem lies with menu, which relies on multiple buffers, mainly because
+	// it is crappy code.
+	_gfx->setBackground(&info->bg);
+	_gfx->setPalette(info->palette);
+	_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
 
-	_gfx->displayCenteredString(14, _slideText[0]); // displays text on screen
-	_gfx->updateScreen();
+	info->bg.free();
+	info->mask.free();
+	info->path.free();
 
-	waitUntilLeftClick();
-
-	debugC(2, kDebugLocation, "changeLocation: intro text shown");
-
 	return;
 }
 
@@ -340,6 +374,11 @@
 	if (list.size() > 1) {
 		if (list[1] == "slide") {
 			showSlide(list[0].c_str());
+			_gfx->setFont(kFontMenu);
+			_gfx->displayCenteredString(14, _slideText[0]); // displays text on screen
+			_gfx->updateScreen();
+			waitUntilLeftClick();
+
 			list.remove_at(0);		// removes slide name
 			list.remove_at(0);		// removes 'slide'
 		}

Modified: scummvm/trunk/engines/parallaction/menu.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/menu.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/menu.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -128,15 +128,11 @@
 
 void Menu::splash() {
 
-	_vm->_disk->loadSlide("intro");
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-	_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
+	_vm->showSlide("intro");
 	_vm->_gfx->updateScreen();
 	g_system->delayMillis(2000);
 
-	_vm->_disk->loadSlide("minintro");
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-	_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
+	_vm->showSlide("minintro");
 	_vm->_gfx->updateScreen();
 	g_system->delayMillis(2000);
 
@@ -155,8 +151,8 @@
 
 	_vm->_disk->selectArchive("disk1");
 
-	_vm->_disk->loadScenery("test", NULL);
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
+	_vm->setBackground("test", NULL, NULL);
+
 	_vm->_gfx->swapBuffers();
 
 	_vm->_gfx->displayCenteredString(50, v14[0]);
@@ -200,11 +196,7 @@
 	}
 
 	// user can choose language in dos version
-
-	_vm->_disk->loadSlide("lingua");
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-	_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
-
+	_vm->showSlide("lingua");
 	_vm->_gfx->displayString(60, 30, "SELECT LANGUAGE", 1);
 
 	_vm->changeCursor(kCursorArrow);
@@ -260,8 +252,7 @@
 		return 0;	// can't load a savegame in demo versions
 	}
 
-	_vm->_disk->loadSlide("restore");
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
+	_vm->showSlide("restore");
 
 	uint16 _si = 0;
 	uint16 _di = 3;
@@ -353,11 +344,8 @@
 
 	_vm->_disk->selectArchive((_vm->getFeatures() & GF_LANG_MULT) ? "disk1" : "disk0");
 
-	_vm->_disk->loadSlide("password");	// loads background into kBitBack buffer
-	_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);	//
+	_vm->showSlide("password");	// loads background into kBitBack buffer
 
-	_vm->_gfx->setPalette(_vm->_gfx->_palette);
-
 	while (true) {
 
 		_di = 0;

Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -123,6 +123,8 @@
 Parallaction::~Parallaction() {
 	delete _debugger;
 
+	freeBackground();
+
 	delete _globalTable;
 
 	delete _callableNames;
@@ -131,11 +133,6 @@
 	delete _zoneTypeNames;
 	delete _zoneFlagNames;
 
-	if (_pathBuffer) {
-		_pathBuffer->free();
-		delete _pathBuffer;
-	}
-
 	_animations.remove(&_char._ani);
 
 	freeLocation();
@@ -169,6 +166,7 @@
 	_location._comment = NULL;
 	_location._endComment = NULL;
 
+	_backgroundInfo = 0;
 	_screenPathWidth = _screenWidth / 8;
 	_screenSize = _screenWidth * _screenHeight;
 	_screenPathSize = _screenPathWidth * _screenHeight;

Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/parallaction.h	2007-08-11 13:07:21 UTC (rev 28524)
@@ -221,7 +221,6 @@
 class SoundMan;
 
 
-
 struct Location {
 
 	Common::Point	_startPosition;
@@ -281,7 +280,18 @@
 	int16 lookup(const char* s);
 };
 
+struct BackgroundInfo {
+	uint width;
+	uint height;
 
+	Graphics::Surface	bg;
+	MaskBuffer			mask;
+	PathBuffer			path;
+
+	Palette				palette;
+};
+
+
 class Parallaction : public Engine {
 	friend class Debugger;
 
@@ -333,6 +343,10 @@
 	void		sortAnimations();
 	void 		freeAnimations();
 
+	void 		showSlide(const char *name);
+	void 		setBackground(const char *background, const char *mask, const char *path);
+	void 		freeBackground();
+
 	Table		*_globalTable;
 	Table		*_objectsNames;
 	Table		*_zoneTypeNames;
@@ -421,7 +435,9 @@
 	bool		_hasLocationSound;
 	char		_locationSound[50];
 
+	BackgroundInfo	*_backgroundInfo;
 
+
 protected:		// members
 	bool detectGame(void);
 
@@ -441,7 +457,6 @@
 
 	void		doLocationEnterTransition();
 	void		changeLocation(char *location);
-	void 		showSlide(const char *name);
 	void 		resolveLocationForwards();
 	void 		switchBackground(const char* background, const char* mask);
 	void 		freeLocation();

Modified: scummvm/trunk/engines/parallaction/walk.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/walk.cpp	2007-08-11 12:26:17 UTC (rev 28523)
+++ scummvm/trunk/engines/parallaction/walk.cpp	2007-08-11 13:07:21 UTC (rev 28524)
@@ -422,11 +422,6 @@
 
 
 void Parallaction::setPath(PathBuffer *buffer) {
-	if (_pathBuffer) {
-		_pathBuffer->free();
-		delete _pathBuffer;
-	}
-
 	_pathBuffer = buffer;
 }
 


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