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

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sun Mar 15 10:29:25 CET 2009


Revision: 39413
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39413&view=rev
Author:   Kirben
Date:     2009-03-15 09:29:25 +0000 (Sun, 15 Mar 2009)

Log Message:
-----------
Fix loading objects in the Amiga version of BRA.

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

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2009-03-15 08:17:57 UTC (rev 39412)
+++ scummvm/trunk/engines/parallaction/disk.h	2009-03-15 09:29:25 UTC (rev 39413)
@@ -66,7 +66,7 @@
 	virtual Script* loadLocation(const char *name) = 0;
 	virtual Script* loadScript(const char* name) = 0;
 	virtual GfxObj* loadTalk(const char *name) = 0;
-	virtual GfxObj* loadObjects(const char *name) = 0;
+	virtual GfxObj* loadObjects(const char *name, uint8 part = 0) = 0;
 	virtual Frames* loadPointer(const char *name) = 0;
 	virtual GfxObj* loadHead(const char* name) = 0;
 	virtual Font* loadFont(const char* name) = 0;
@@ -130,7 +130,7 @@
 	Script* loadLocation(const char *name);
 	Script* loadScript(const char* name);
 	GfxObj* loadTalk(const char *name);
-	GfxObj* loadObjects(const char *name);
+	GfxObj* loadObjects(const char *name, uint8 part = 0);
 	Frames* loadPointer(const char *name);
 	GfxObj* loadHead(const char* name);
 	Font* loadFont(const char* name);
@@ -166,7 +166,7 @@
 	Script* loadLocation(const char *name);
 	Script* loadScript(const char* name);
 	GfxObj* loadTalk(const char *name);
-	GfxObj* loadObjects(const char *name);
+	GfxObj* loadObjects(const char *name, uint8 part = 0);
 	Frames* loadPointer(const char *name);
 	GfxObj* loadHead(const char* name);
 	Font* loadFont(const char* name);
@@ -222,7 +222,7 @@
 	Script* loadLocation(const char *name);
 	Script* loadScript(const char* name);
 	GfxObj* loadTalk(const char *name);
-	GfxObj* loadObjects(const char *name);
+	GfxObj* loadObjects(const char *name, uint8 part = 0);
 	Frames* loadPointer(const char *name);
 	GfxObj* loadHead(const char* name);
 	Font* loadFont(const char* name);
@@ -264,7 +264,7 @@
 	Frames* loadFrames(const char* name);
 	void loadSlide(BackgroundInfo& info, const char *filename);
 	void loadScenery(BackgroundInfo& info, const char* name, const char* mask, const char* path);
-	GfxObj* loadObjects(const char *name);
+	GfxObj* loadObjects(const char *name, uint8 part = 0);
 	Common::SeekableReadStream* loadMusic(const char* name);
 	Common::ReadStream* loadSound(const char* name);
 	Common::String selectArchive(const Common::String& name);

Modified: scummvm/trunk/engines/parallaction/disk_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-15 08:17:57 UTC (rev 39412)
+++ scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-15 09:29:25 UTC (rev 39413)
@@ -249,7 +249,7 @@
 }
 
 
-GfxObj* DosDisk_br::loadObjects(const char *name) {
+GfxObj* DosDisk_br::loadObjects(const char *name, uint8 part) {
 	debugC(5, kDebugDisk, "DosDisk_br::loadObjects");
 	Common::SeekableReadStream *stream = openFile(name);
 	GfxObj *obj = createInventoryObjects(*stream);
@@ -607,7 +607,11 @@
 	return openFile("sfx/" + Common::String(name), ".sfx");
 }
 
-GfxObj* AmigaDisk_br::loadObjects(const char *name) {
+static const uint16 objectsMax[5] = {
+	5, 73, 71, 19, 48
+};
+
+GfxObj* AmigaDisk_br::loadObjects(const char *name, uint8 part) {
 	debugC(5, kDebugDisk, "AmigaDisk_br::loadObjects");
 
 	Common::SeekableReadStream *stream = openFile(name);
@@ -621,7 +625,24 @@
 	delete stream;
 	free(pal);
 
-	return new GfxObj(0, new SurfaceToFrames(surf));
+	uint16 max = objectsMax[part];
+	byte *data = new byte[max * 2601];
+
+	// Convert to the expected display format
+	for (int i = 0; i < max; i++) {
+		uint16 x = (i % 8) * 51;
+		uint16 y = (i / 8) * 51;
+
+		byte *src = (byte *)surf->getBasePtr(x, y);
+		byte *dst = data + i * 2601;
+		for (int h = 0; h < 51; h++) {
+			memcpy(dst, src, 51);
+			src += surf->w;
+			dst += 51;
+		}
+	}
+
+	return new GfxObj(0, new Cnv(max, 51, 51, data, true));
 }
 
 Common::String AmigaDisk_br::selectArchive(const Common::String& name) {

Modified: scummvm/trunk/engines/parallaction/disk_ns.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_ns.cpp	2009-03-15 08:17:57 UTC (rev 39412)
+++ scummvm/trunk/engines/parallaction/disk_ns.cpp	2009-03-15 09:29:25 UTC (rev 39413)
@@ -371,7 +371,7 @@
 }
 
 
-GfxObj* DosDisk_ns::loadObjects(const char *name) {
+GfxObj* DosDisk_ns::loadObjects(const char *name, uint8 part) {
 	char path[PATH_LEN];
 	sprintf(path, "%sobj", name);
 	return new GfxObj(0, loadExternalCnv(path), name);
@@ -1154,7 +1154,7 @@
 }
 
 
-GfxObj* AmigaDisk_ns::loadObjects(const char *name) {
+GfxObj* AmigaDisk_ns::loadObjects(const char *name, uint8 part) {
 	debugC(1, kDebugDisk, "AmigaDisk_ns::loadObjects");
 
 	char path[PATH_LEN];

Modified: scummvm/trunk/engines/parallaction/inventory.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/inventory.cpp	2009-03-15 08:17:57 UTC (rev 39412)
+++ scummvm/trunk/engines/parallaction/inventory.cpp	2009-03-15 09:29:25 UTC (rev 39413)
@@ -66,9 +66,9 @@
 	24,		// INVENTORYITEM_WIDTH
 	24,		// INVENTORYITEM_HEIGHT
 	30,		// INVENTORY_MAX_ITEMS
-	5,			// INVENTORY_ITEMS_PER_LINE
-	6,			// INVENTORY_LINES
-	5 * 24,	// INVENTORY_WIDTH =(INVENTORY_ITEMS_PER_LINE*INVENTORYITEM_WIDTH)
+	5,		// INVENTORY_ITEMS_PER_LINE
+	6,		// INVENTORY_LINES
+	5 * 24,		// INVENTORY_WIDTH =(INVENTORY_ITEMS_PER_LINE*INVENTORYITEM_WIDTH)
 	6 * 24		// INVENTORY_HEIGHT = (INVENTORY_LINES*INVENTORYITEM_HEIGHT)
 };
 
@@ -77,10 +77,10 @@
 	51,		// INVENTORYITEM_WIDTH
 	51,		// INVENTORYITEM_HEIGHT
 	48,		// INVENTORY_MAX_ITEMS
-	6,			// INVENTORY_ITEMS_PER_LINE
-	8,			// INVENTORY_LINES
+	6,		// INVENTORY_ITEMS_PER_LINE
+	8,		// INVENTORY_LINES
 	6 * 51,		// INVENTORY_WIDTH =(INVENTORY_ITEMS_PER_LINE*INVENTORYITEM_WIDTH)
-	8 * 51			// INVENTORY_HEIGHT = (INVENTORY_LINES*INVENTORYITEM_HEIGHT)
+	8 * 51		// INVENTORY_HEIGHT = (INVENTORY_LINES*INVENTORYITEM_HEIGHT)
 };
 
 int16 Parallaction::getHoverInventoryItem(int16 x, int16 y) {

Modified: scummvm/trunk/engines/parallaction/parallaction_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_br.cpp	2009-03-15 08:17:57 UTC (rev 39412)
+++ scummvm/trunk/engines/parallaction/parallaction_br.cpp	2009-03-15 09:29:25 UTC (rev 39413)
@@ -261,7 +261,7 @@
 		if (getPlatform() == Common::kPlatformPC) {
 			_objects = _disk->loadObjects("icone.ico");
 		} else {
-			_objects = _disk->loadObjects("icons.ico");
+			_objects = _disk->loadObjects("icons.ico", _part);
 		}
 
 		parseLocation("common.slf");


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