[Scummvm-cvs-logs] CVS: scummvm/scumm verbs.cpp,1.27,1.28

Max Horn fingolfin at users.sourceforge.net
Sat Apr 12 12:45:04 CEST 2003


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

Modified Files:
	verbs.cpp 
Log Message:
hacked in some verb object support for OLD_BUNDLE (drawVerbBitmap part not yet tested; but the setVerbObject is needed now already)

Index: verbs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/verbs.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- verbs.cpp	7 Apr 2003 15:51:37 -0000	1.27
+++ verbs.cpp	12 Apr 2003 19:44:06 -0000	1.28
@@ -202,7 +202,7 @@
 void Scumm::drawVerbBitmap(int verb, int x, int y) {
 	VirtScreen *vs;
 	VerbSlot *vst;
-	byte twobufs, *imptr;
+	byte twobufs, *imptr = 0;
 	int ydiff, xstrip;
 	int imgw, imgh;
 	int i, tmp;
@@ -223,8 +223,23 @@
 
 	obim = getResourceAddress(rtVerb, verb);
 	if (_features & GF_SMALL_HEADER) {
-		int obj;
-		obj = READ_LE_UINT16(obim + 6);
+		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 + 11));
+		imgh = (*(roomptr + _objs[i].OBCDoffset + 17)) >> 3;
+		imptr = (roomptr + _objs[i].OBIMoffset + 8);
+	} else if (_features & GF_SMALL_HEADER) {
 		size = READ_LE_UINT32(obim);
 
 		imgw = (*(obim + size + 11));
@@ -255,6 +270,7 @@
 		if (!imptr)
 			error("No image for verb %d", verb);
 	}
+	assert(imptr);
 	for (i = 0; i < imgw; i++) {
 		tmp = xstrip + i;
 		if (tmp < gdi._numStrips)
@@ -313,7 +329,11 @@
 	if (whereIsObject(object) == WIO_FLOBJECT)
 		error("Can't grab verb image from flobject");
 
-	if (_features & GF_SMALL_HEADER) {
+	if (_features & GF_OLD_BUNDLE) {
+		uint32 *ptr = (uint32 *)createResource(rtVerb, verb, 8);
+		ptr[0] = TO_LE_32(room);
+		ptr[1] = TO_LE_32(object);
+	} else if (_features & GF_SMALL_HEADER) {
 		for (i = (_numLocalObjects-1); i > 0; i--) {
 			if (_objs[i].obj_nr == object) {
 				findObjectInRoom(&foir, foImageHeader, object, room);
@@ -325,6 +345,7 @@
 				obcdptr = getResourceAddress(rtRoom, room) + getOBCDOffs(object);
 				memcpy(getResourceAddress(rtVerb, verb), obimptr, size);
 				memcpy(getResourceAddress(rtVerb, verb) + size, obcdptr, size2);
+				return;
 			}
 		}
 	} else {





More information about the Scummvm-git-logs mailing list