[Scummvm-cvs-logs] CVS: scummvm/scumm verbs.cpp,1.31,1.32

Max Horn fingolfin at users.sourceforge.net
Mon Apr 28 18:39:09 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv27540

Modified Files:
	verbs.cpp 
Log Message:
fixed LoomEGA distaff (you'll need to start a new game); added FIXME comment

Index: verbs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/verbs.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- verbs.cpp	26 Apr 2003 17:16:53 -0000	1.31
+++ verbs.cpp	29 Apr 2003 01:38:10 -0000	1.32
@@ -221,24 +221,11 @@
 	xstrip = x >> 3;
 	ydiff = y - vs->topline;
 
-	obim = getResourceAddress(rtVerb, verb);
+	assert(obim = getResourceAddress(rtVerb, verb));
 	if (_features & GF_OLD_BUNDLE) {
-		int room = READ_LE_UINT32(obim);
-		int object = READ_LE_UINT32(obim + 4);
-		byte *roomptr = getResourceAddress(rtRoom, room);
-		
-		assert(room == _roomResource);
-		
-		for (i = (_numLocalObjects-1); i > 0; i--) {
-			if (_objs[i].obj_nr == object) {
-				break;
-			}
-		}
-		assert(_objs[i].obj_nr == object);
-
-		imgw = (*(roomptr + _objs[i].OBCDoffset + 9));
-		imgh = (*(roomptr + _objs[i].OBCDoffset + 15)) >> 3;
-		imptr = (roomptr + _objs[i].OBIMoffset);
+		imgw = obim[0];
+		imgh = obim[1] >> 3;
+		imptr = obim + 2;
 	} else if (_features & GF_SMALL_HEADER) {
 		size = READ_LE_UINT32(obim);
 
@@ -330,12 +317,25 @@
 		error("Can't grab verb image from flobject");
 
 	if (_features & GF_OLD_BUNDLE) {
-		uint32 *ptr = (uint32 *)createResource(rtVerb, verb, 8);
-		ptr[0] = TO_LE_32(room);
-		ptr[1] = TO_LE_32(object);
+		for (i = (_numLocalObjects-1); i > 0; i--) {
+			if (_objs[i].obj_nr == object) {
+				findObjectInRoom(&foir, foImageHeader, object, room);
+				size = READ_LE_UINT16(foir.obim);
+				byte *ptr = createResource(rtVerb, verb, size + 2);
+				obcdptr = getResourceAddress(rtRoom, room) + getOBCDOffs(object);
+				ptr[0] = *(obcdptr + 9);	// Width
+				ptr[1] = *(obcdptr + 15);	// Height
+				memcpy(ptr + 2, foir.obim, size);
+				return;
+			}
+		}
 	} else if (_features & GF_SMALL_HEADER) {
 		for (i = (_numLocalObjects-1); i > 0; i--) {
 			if (_objs[i].obj_nr == object) {
+				// FIXME - the only thing we need from the OBCD is the image size!
+				// So we could use almost the same code (save for offsets)
+				// as in the GF_OLD_BUNDLE code. But of course that would break save games
+				// unless we insert special conversion code... <sigh>
 				findObjectInRoom(&foir, foImageHeader, object, room);
 				size = READ_LE_UINT32(foir.obim);
 				obcdptr = getResourceAddress(rtRoom, room) + getOBCDOffs(object);





More information about the Scummvm-git-logs mailing list