[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