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

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sun Aug 12 19:13:21 CEST 2007


Revision: 28566
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28566&view=rev
Author:   peres001
Date:     2007-08-12 10:13:21 -0700 (Sun, 12 Aug 2007)

Log Message:
-----------
Changed signature of disk routines for backgrounds to something resembling revisions prior to 28524, yet keeping the new useful BackgroundInfo struct. Those routines can now be used to fill specific fields of the struct, instead of having them create a new one at each call.
This feature is needed by BRA, since background, mask and path are specified by different instructions in the script.

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/location.cpp
    scummvm/trunk/engines/parallaction/parallaction.cpp
    scummvm/trunk/engines/parallaction/parallaction_br.cpp

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2007-08-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/disk.h	2007-08-12 17:13:21 UTC (rev 28566)
@@ -59,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 BackgroundInfo* loadSlide(const char *filename) = 0;
-	virtual BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path) = 0;
+	virtual void loadSlide(BackgroundInfo& info, const char *filename) = 0;
+	virtual void loadScenery(BackgroundInfo& info, 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;
@@ -129,10 +129,10 @@
 	Cnv* loadExternalCnv(const char *filename);
 	Cnv* loadCnv(const char *filename);
 	Graphics::Surface *loadExternalStaticCnv(const char *filename);
-	BackgroundInfo* loadBackground(const char *filename);
-	void loadMaskAndPath(const char *name, BackgroundInfo *info);
+	void loadBackground(BackgroundInfo& info, const char *filename);
+	void loadMaskAndPath(BackgroundInfo& info, const char *name);
 	void parseDepths(Common::SeekableReadStream &stream);
-	void parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info);
+	void parseBackground(BackgroundInfo& info, Common::SeekableReadStream &stream);
 	Font *createFont(const char *name, Cnv* cnv);
 
 protected:
@@ -151,8 +151,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	BackgroundInfo* loadSlide(const char *filename);
-	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
+	void loadSlide(BackgroundInfo& info, const char *filename);
+	void loadScenery(BackgroundInfo& info, 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);
@@ -168,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, BackgroundInfo* info);
-	void loadPath(const char *name, BackgroundInfo* info);
-	BackgroundInfo* loadBackground(const char *name);
+	void loadMask(BackgroundInfo& info, const char *name);
+	void loadPath(BackgroundInfo& info, const char *name);
+	void loadBackground(BackgroundInfo& info, const char *name);
 
 public:
 	AmigaDisk_ns(Parallaction *vm);
@@ -185,8 +185,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	BackgroundInfo* loadSlide(const char *filename);
-	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
+	void loadSlide(BackgroundInfo& info, const char *filename);
+	void loadScenery(BackgroundInfo& info, 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);
@@ -222,8 +222,8 @@
 	Font* loadFont(const char* name);
 	Graphics::Surface* loadStatic(const char* name);
 	Cnv* loadFrames(const char* name);
-	BackgroundInfo* loadSlide(const char *filename);
-	BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
+	void loadSlide(BackgroundInfo& info, const char *filename);
+	void loadScenery(BackgroundInfo& info, 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-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/disk_br.cpp	2007-08-12 17:13:21 UTC (rev 28566)
@@ -175,7 +175,7 @@
 // doesn't need slides in that sense, but it still has some special
 // graphics resources with palette data, so those will be named slides.
 //
-BackgroundInfo* DosDisk_br::loadSlide(const char *name) {
+void DosDisk_br::loadSlide(BackgroundInfo& info, const char *name) {
 	debugC(5, kDebugDisk, "DosDisk_br::loadSlide");
 
 	char path[PATH_LEN];
@@ -185,29 +185,27 @@
 	if (!stream.open(path))
 		errorFileNotFound(path);
 
-	BackgroundInfo* info = new BackgroundInfo;
-
 	stream.skip(4);
-	info->width = stream.readUint32BE();
-	info->height = stream.readUint32BE();
+	info.width = stream.readUint32BE();
+	info.height = stream.readUint32BE();
 	stream.skip(20);
 
 	byte rgb[768];
 	stream.read(rgb, 768);
 
 	for (uint i = 0; i < 256; i++) {
-		info->palette.setEntry(i, rgb[i] >> 2, rgb[i+256] >> 2, rgb[i+512] >> 2);
+		info.palette.setEntry(i, rgb[i] >> 2, rgb[i+256] >> 2, rgb[i+512] >> 2);
 	}
 
-	info->bg.create(info->width, info->height, 1);
-	stream.read(info->bg.pixels, info->width * info->height);
+	info.bg.create(info.width, info.height, 1);
+	stream.read(info.bg.pixels, info.width * info.height);
 
-	return info;
+	return;
 }
 
-BackgroundInfo* DosDisk_br::loadScenery(const char *name, const char *mask, const char* path) {
+void DosDisk_br::loadScenery(BackgroundInfo& info, const char *name, const char *mask, const char* path) {
 	debugC(5, kDebugDisk, "DosDisk_br::loadScenery");
-	return 0;
+	return;
 }
 
 Table* DosDisk_br::loadTable(const char* name) {

Modified: scummvm/trunk/engines/parallaction/disk_ns.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_ns.cpp	2007-08-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/disk_ns.cpp	2007-08-12 17:13:21 UTC (rev 28566)
@@ -562,7 +562,7 @@
 }
 
 
-void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info) {
+void DosDisk_ns::parseBackground(BackgroundInfo& info, Common::SeekableReadStream &stream) {
 
 	byte tmp[3];
 
@@ -570,7 +570,7 @@
 		tmp[0] = stream.readByte();
 		tmp[1] = stream.readByte();
 		tmp[2] = stream.readByte();
-		info->palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
+		info.palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
 	}
 
 	parseDepths(stream);
@@ -585,25 +585,24 @@
 
 }
 
-BackgroundInfo* DosDisk_ns::loadBackground(const char *filename) {
+void DosDisk_ns::loadBackground(BackgroundInfo& info, const char *filename) {
 
 	if (!_resArchive.openArchivedFile(filename))
 		errorFileNotFound(filename);
 
-	BackgroundInfo *info = new BackgroundInfo;
-	info->width = _vm->_screenWidth;	// 320
-	info->height = _vm->_screenHeight;	// 200
+	info.width = _vm->_screenWidth;	// 320
+	info.height = _vm->_screenHeight;	// 200
 
-	parseBackground(_resArchive, info);
+	parseBackground(info, _resArchive);
 
-	info->bg.create(info->width, info->height, 1);
-	info->mask.create(info->width, info->height);
-	info->path.create(info->width, info->height);
+	info.bg.create(info.width, info.height, 1);
+	info.mask.create(info.width, info.height);
+	info.path.create(info.width, info.height);
 
 	Graphics::PackBitsReadStream stream(_resArchive);
-	unpackBackground(&stream, (byte*)info->bg.pixels, info->mask.data, info->path.data);
+	unpackBackground(&stream, (byte*)info.bg.pixels, info.mask.data, info.path.data);
 
-	return info;
+	return;
 }
 
 //
@@ -612,7 +611,7 @@
 //	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, BackgroundInfo *info) {
+void DosDisk_ns::loadMaskAndPath(BackgroundInfo& info, const char *name) {
 	char path[PATH_LEN];
 	sprintf(path, "%s.msk", name);
 
@@ -621,32 +620,35 @@
 
 	parseDepths(_resArchive);
 
-	info->path.create(info->width, info->height);
-	_resArchive.read(info->path.data, info->path.size);
+	info.path.create(info.width, info.height);
+	_resArchive.read(info.path.data, info.path.size);
 
-	info->mask.create(info->width, info->height);
-	_resArchive.read(info->mask.data, info->mask.size);
+	info.mask.create(info.width, info.height);
+	_resArchive.read(info.mask.data, info.mask.size);
 
 	return;
 }
 
-BackgroundInfo* DosDisk_ns::loadSlide(const char *filename) {
+void DosDisk_ns::loadSlide(BackgroundInfo& info, const char *filename) {
 	char path[PATH_LEN];
 	sprintf(path, "%s.slide", filename);
-	return loadBackground(path);
+	loadBackground(info, path);
+
+	return;
 }
 
-BackgroundInfo* DosDisk_ns::loadScenery(const char *name, const char *mask, const char* path) {
+void DosDisk_ns::loadScenery(BackgroundInfo& info, const char *name, const char *mask, const char* path) {
 	char filename[PATH_LEN];
 	sprintf(filename, "%s.dyn", name);
-	BackgroundInfo *info = loadBackground(filename);
 
+	loadBackground(info, filename);
+
 	if (mask != NULL) {
 		// load external masks and paths only for certain locations
-		loadMaskAndPath(mask, info);
+		loadMaskAndPath(info, mask);
 	}
 
-	return info;
+	return;
 }
 
 Table* DosDisk_ns::loadTable(const char* name) {
@@ -1176,19 +1178,17 @@
 };
 
 
-BackgroundInfo* AmigaDisk_ns::loadBackground(const char *name) {
+void AmigaDisk_ns::loadBackground(BackgroundInfo& info, const char *name) {
 
 	Common::SeekableReadStream *s = openArchivedFile(name, true);
 
 	byte *pal;
 
-	BackgroundInfo* info = new BackgroundInfo;
-
-	BackgroundDecoder decoder(*s, info->bg, pal, _vm->_gfx->_palettefx);
+	BackgroundDecoder decoder(*s, info.bg, pal, _vm->_gfx->_palettefx);
 	decoder.decode();
 
-	info->width = info->bg.w;
-	info->height = info->bg.h;
+	info.width = info.bg.w;
+	info.height = info.bg.h;
 
 	byte *p = pal;
 	for (uint i = 0; i < 32; i++) {
@@ -1198,18 +1198,18 @@
 		p++;
 		byte b = *p >> 2;
 		p++;
-		info->palette.setEntry(i, r, g, b);
+		info.palette.setEntry(i, r, g, b);
 	}
 
 	free(pal);
 
 	delete s;
 
-	return info;
+	return;
 
 }
 
-void AmigaDisk_ns::loadMask(const char *name, BackgroundInfo* info) {
+void AmigaDisk_ns::loadMask(BackgroundInfo& info, const char *name) {
 	debugC(5, kDebugDisk, "AmigaDisk_ns::loadMask(%s)", name);
 
 	char path[PATH_LEN];
@@ -1238,16 +1238,16 @@
 	s->seek(0x126, SEEK_SET);	// HACK: skipping IFF/ILBM header should be done by analysis, not magic
 	Graphics::PackBitsReadStream stream(*s);
 
-	info->mask.create(info->width, info->height);
-	stream.read(info->mask.data, info->mask.size);
-	buildMask(info->mask.data);
+	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, BackgroundInfo* info) {
+void AmigaDisk_ns::loadPath(BackgroundInfo& info, const char *name) {
 
 	char path[PATH_LEN];
 	sprintf(path, "%s.path", name);
@@ -1261,49 +1261,48 @@
 
 	Graphics::PackBitsReadStream stream(*s);
 
-	info->path.create(info->width, info->height);
-	stream.read(info->path.data, info->path.size);
+	info.path.create(info.width, info.height);
+	stream.read(info.path.data, info.path.size);
 
 	delete s;
 
 	return;
 }
 
-BackgroundInfo* AmigaDisk_ns::loadScenery(const char* background, const char* mask, const char* path) {
+void AmigaDisk_ns::loadScenery(BackgroundInfo& info, const char* background, const char* mask, const char* path) {
 	debugC(1, kDebugDisk, "AmigaDisk_ns::loadScenery '%s', '%s'", background, mask);
 
 	char filename[PATH_LEN];
 	sprintf(filename, "%s.bkgnd", background);
 
-	BackgroundInfo* info = loadBackground(filename);
+	loadBackground(info, filename);
 
 	if (mask == NULL) {
-		loadMask(background, info);
-		loadPath(background, info);
+		loadMask(info, background);
+		loadPath(info, background);
 	} else {
-		loadMask(mask, info);
-		loadPath(mask, info);
+		loadMask(info, mask);
+		loadPath(info, mask);
 	}
 
-	return info;
+	return;
 }
 
-BackgroundInfo*  AmigaDisk_ns::loadSlide(const char *name) {
+void AmigaDisk_ns::loadSlide(BackgroundInfo& info, 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)
-		info = loadBackground(path);
+		loadBackground(info, path);
 	else
-		info = loadBackground(name);
+		loadBackground(info, name);
 
 	delete s;
 
-	return info;
+	return;
 }
 
 Cnv* AmigaDisk_ns::loadFrames(const char* name) {

Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp	2007-08-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/location.cpp	2007-08-12 17:13:21 UTC (rev 28566)
@@ -240,9 +240,7 @@
 	_backgroundInfo->bg.free();
 	_backgroundInfo->mask.free();
 	_backgroundInfo->path.free();
-	delete _backgroundInfo;
 
-	_backgroundInfo = 0;
 	_pathBuffer = 0;
 
 }
@@ -251,7 +249,7 @@
 
 	freeBackground();
 
-	_backgroundInfo = _disk->loadScenery(background, mask, path);
+	_disk->loadScenery(*_backgroundInfo, background, mask, path);
 
 	_gfx->setPalette(_backgroundInfo->palette);
 	_gfx->_palette.clone(_backgroundInfo->palette);
@@ -316,21 +314,21 @@
 
 void Parallaction::showSlide(const char *name) {
 
-	BackgroundInfo *info;
+	BackgroundInfo info;
 
-	info = _disk->loadSlide(name);
+	_disk->loadSlide(info, name);
 
 	// 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->setBackground(&info.bg);
+	_gfx->setPalette(info.palette);
 	_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
 
-	info->bg.free();
-	info->mask.free();
-	info->path.free();
+	info.bg.free();
+	info.mask.free();
+	info.path.free();
 
 	return;
 }

Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp	2007-08-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp	2007-08-12 17:13:21 UTC (rev 28566)
@@ -123,6 +123,7 @@
 	delete _debugger;
 
 	freeBackground();
+	delete _backgroundInfo;
 
 	delete _globalTable;
 
@@ -169,6 +170,7 @@
 
 	_screenSize = _screenWidth * _screenHeight;
 
+	_backgroundInfo = new BackgroundInfo;
 
 	strcpy(_characterName1, "null");
 	strcpy(_characterName, "dough");

Modified: scummvm/trunk/engines/parallaction/parallaction_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_br.cpp	2007-08-12 13:54:31 UTC (rev 28565)
+++ scummvm/trunk/engines/parallaction/parallaction_br.cpp	2007-08-12 17:13:21 UTC (rev 28566)
@@ -151,27 +151,25 @@
 
 void Parallaction_br::splash(const char *name) {
 
-	BackgroundInfo *info;
+	BackgroundInfo info;
 
 	_gfx->clearScreen(Gfx::kBitFront);
 
-	info = _disk->loadSlide(name);
-	_gfx->setPalette(info->palette);
-	_gfx->flatBlitCnv(&info->bg, (640 - info->width) >> 1, (400 - info->height) >> 1, Gfx::kBitFront);
+	_disk->loadSlide(info, name);
+	_gfx->setPalette(info.palette);
+	_gfx->flatBlitCnv(&info.bg, (640 - info.width) >> 1, (400 - info.height) >> 1, Gfx::kBitFront);
 	_gfx->updateScreen();
 	_system->delayMillis(600);
 
 	Palette pal;
 	for (uint i = 0; i < 64; i++) {
-		info->palette.fadeTo(pal, 1);
-		_gfx->setPalette(info->palette);
+		info.palette.fadeTo(pal, 1);
+		_gfx->setPalette(info.palette);
 		_gfx->updateScreen();
 		_system->delayMillis(20);
 	}
-	info->bg.free();
+	info.bg.free();
 
-	delete info;
-
 	return;
 }
 
@@ -197,7 +195,7 @@
 
 	_gfx->clearScreen(Gfx::kBitFront);
 
-	BackgroundInfo *info;
+	BackgroundInfo info;
 
 	Graphics::Surface	_menuItems[7];
 
@@ -221,9 +219,9 @@
 		kMenuPart4
 	};
 
-	info = _disk->loadSlide("tbra");
-	_gfx->setPalette(info->palette);
-	_gfx->flatBlitCnv(&info->bg, 20, 50, Gfx::kBitFront);
+	_disk->loadSlide(info, "tbra");
+	_gfx->setPalette(info.palette);
+	_gfx->flatBlitCnv(&info.bg, 20, 50, Gfx::kBitFront);
 
 	int availItems = 4 + _progress;
 
@@ -274,8 +272,7 @@
 
 	_system->showMouse(false);
 
-	info->bg.free();
-	delete info;
+	info.bg.free();
 
 	for (int i = 0; i < availItems; i++)
 		_menuItems[i].free();


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