[Scummvm-cvs-logs] CVS: scummvm/scumm cursor.cpp,2.32,2.33 intern.h,2.443,2.444 object.cpp,1.224,1.225 object.h,1.17,1.18 scumm.h,1.582,1.583

Max Horn fingolfin at users.sourceforge.net
Sun Apr 17 16:20:23 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5924

Modified Files:
	cursor.cpp intern.h object.cpp object.h scumm.h 
Log Message:
New virtual method getObjectIdFromOBIM

Index: cursor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/cursor.cpp,v
retrieving revision 2.32
retrieving revision 2.33
diff -u -d -r2.32 -r2.33
--- cursor.cpp	24 Mar 2005 03:22:14 -0000	2.32
+++ cursor.cpp	17 Apr 2005 23:19:15 -0000	2.33
@@ -157,26 +157,28 @@
 	const byte *dataptr, *bomp;
 	uint32 size;
 	FindObjectInRoom foir;
+	const ImageHeader *imhd;
 
 	if (room == (uint) - 1)
 		room = getObjectRoom(img);
 
 	findObjectInRoom(&foir, foCodeHeader | foImageHeader | foCheckAlreadyLoaded, img, room);
+	imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), foir.obim);
 
 	if (_version == 8) {
-		setCursorHotspot(READ_LE_UINT32(&foir.imhd->v8.hotspot[0].x),
-		                  READ_LE_UINT32(&foir.imhd->v8.hotspot[0].y));
-		w = READ_LE_UINT32(&foir.imhd->v8.width) / 8;
-		h = READ_LE_UINT32(&foir.imhd->v8.height) / 8;
+		setCursorHotspot(READ_LE_UINT32(&imhd->v8.hotspot[0].x),
+		                  READ_LE_UINT32(&imhd->v8.hotspot[0].y));
+		w = READ_LE_UINT32(&imhd->v8.width) / 8;
+		h = READ_LE_UINT32(&imhd->v8.height) / 8;
 	} else if (_version == 7) {
-		setCursorHotspot(READ_LE_UINT16(&foir.imhd->v7.hotspot[0].x),
-		                  READ_LE_UINT16(&foir.imhd->v7.hotspot[0].y));
-		w = READ_LE_UINT16(&foir.imhd->v7.width) / 8;
-		h = READ_LE_UINT16(&foir.imhd->v7.height) / 8;
+		setCursorHotspot(READ_LE_UINT16(&imhd->v7.hotspot[0].x),
+		                  READ_LE_UINT16(&imhd->v7.hotspot[0].y));
+		w = READ_LE_UINT16(&imhd->v7.width) / 8;
+		h = READ_LE_UINT16(&imhd->v7.height) / 8;
 	} else {
 		if (!(_features & GF_HUMONGOUS))
-			setCursorHotspot(READ_LE_UINT16(&foir.imhd->old.hotspot[0].x),
-		        	          READ_LE_UINT16(&foir.imhd->old.hotspot[0].y));
+			setCursorHotspot(READ_LE_UINT16(&imhd->old.hotspot[0].x),
+		        	          READ_LE_UINT16(&imhd->old.hotspot[0].y));
 		w = READ_LE_UINT16(&foir.cdhd->v6.w) / 8;
 		h = READ_LE_UINT16(&foir.cdhd->v6.h) / 8;
 	}

Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.443
retrieving revision 2.444
diff -u -d -r2.443 -r2.444
--- intern.h	17 Apr 2005 22:59:43 -0000	2.443
+++ intern.h	17 Apr 2005 23:19:15 -0000	2.444
@@ -1203,6 +1203,8 @@
 	virtual void setCameraFollows(Actor *a);
 	virtual void moveCamera();
 	virtual void panCameraTo(int x, int y);
+
+	virtual int getObjectIdFromOBIM(const byte *obim);
 };
 
 class ScummEngine_v8 : public ScummEngine_v7 {
@@ -1214,7 +1216,9 @@
 	};
 	
 	const OpcodeEntryV8 *_opcodesV8;
-	
+
+	ObjectIDMap _objectIDMap;
+
 public:
 	ScummEngine_v8(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]) : ScummEngine_v7(detector, syst, gs, md5sum) {}
 
@@ -1236,6 +1240,8 @@
 	virtual int readVar(uint var);
 	virtual void writeVar(uint var, int value);
 
+	virtual int getObjectIdFromOBIM(const byte *obim);
+
 	/* Version 8 script opcodes */
 	void o8_mod();
 	void o8_wait();

Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.224
retrieving revision 1.225
diff -u -d -r1.224 -r1.225
--- object.cpp	10 Apr 2005 12:58:56 -0000	1.224
+++ object.cpp	17 Apr 2005 23:19:16 -0000	1.225
@@ -546,7 +546,6 @@
 	const byte *ptr;
 	uint16 obim_id;
 	const byte *room, *searchptr, *rootptr;
-	const ImageHeader *imhd;
 	const CodeHeader *cdhd;
 
 	CHECK_HEAP
@@ -599,15 +598,7 @@
 		if (ptr == NULL)
 			error("Room %d missing image blocks(s)", _roomResource);
 
-		imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), ptr);
-		if (_version == 8)
-			// In V8, IMHD has no obj_id, but rather a name string. We map the name
-			// back to an object id using a table derived from the DOBJ resource.
-			obim_id = _objectIDMap[imhd->v8.name];
-		else if (_version == 7)
-			obim_id = READ_LE_UINT16(&imhd->v7.obj_id);
-		else
-			obim_id = READ_LE_UINT16(&imhd->old.obj_id);
+		obim_id = getObjectIdFromOBIM(ptr);
 
 		for (j = 1; j < _numLocalObjects; j++) {
 			if (_objs[j].obj_nr == obim_id)
@@ -1128,9 +1119,8 @@
 	const CodeHeader *cdhd;
 	int i, numobj;
 	const byte *roomptr, *obcdptr, *obimptr, *searchptr;
-	const ImageHeader *imhd;
 	int id2;
-	int id3;
+	int obim_id;
 
 	if (findWhat & foCheckAlreadyLoaded && getObjectIndex(id) != -1) {
 		if (_features & GF_OLD_BUNDLE) {
@@ -1143,7 +1133,6 @@
 		assert(obcdptr);
 		fo->obim = obimptr = obcdptr + READ_BE_UINT32(obcdptr + 4);
 		fo->cdhd = (const CodeHeader *)findResourceData(MKID('CDHD'), obcdptr);
-		fo->imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obimptr);
 		return;
 	}
 
@@ -1187,7 +1176,6 @@
 				}
 				if (findWhat & foImageHeader) {
 					fo->obim = obimptr;
-					fo->imhd = NULL;
 				}
 				break;
 			}
@@ -1235,21 +1223,10 @@
 			obimptr = obims.findNext(MKID('OBIM'));
 			if (obimptr == NULL)
 				error("findObjectInRoom: Not enough image blocks in room %d", room);
-			imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obimptr);
-			if (_features & GF_SMALL_HEADER)
-				id3 = READ_LE_UINT16(obimptr + 6);
-			else if (_version == 8)
-				// In V8, IMHD has no obj_id, but rather a name string. We map the name
-				// back to an object id using a table derived from the DOBJ resource.
-				id3 = _objectIDMap[imhd->v8.name];
-			else if (_version == 7)
-				id3 = READ_LE_UINT16(&imhd->v7.obj_id);
-			else
-				id3 = READ_LE_UINT16(&imhd->old.obj_id);
+			obim_id = getObjectIdFromOBIM(obimptr);
 
-			if (id3 == (uint16)id) {
+			if (obim_id == (uint16)id) {
 				fo->obim = obimptr;
-				fo->imhd = imhd;
 				break;
 			}
 		}
@@ -1258,6 +1235,27 @@
 	}
 }
 
+int ScummEngine_v8::getObjectIdFromOBIM(const byte *obim) {
+	// In V8, IMHD has no obj_id, but rather a name string. We map the name
+	// back to an object id using a table derived from the DOBJ resource.
+	const ImageHeader *imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obim);
+	return _objectIDMap[imhd->v8.name];
+}
+
+int ScummEngine_v7::getObjectIdFromOBIM(const byte *obim) {
+	const ImageHeader *imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obim);
+	return READ_LE_UINT16(&imhd->v7.obj_id);
+}
+
+int ScummEngine::getObjectIdFromOBIM(const byte *obim) {
+	if (_features & GF_SMALL_HEADER)
+		return READ_LE_UINT16(obim + 6);
+
+	const ImageHeader *imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obim);
+	return READ_LE_UINT16(&imhd->old.obj_id);
+}
+
+
 int ScummEngine::getInventorySlot() {
 	int i;
 	for (i = 0; i < _numInventory; i++) {

Index: object.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- object.h	28 Mar 2005 22:37:30 -0000	1.17
+++ object.h	17 Apr 2005 23:19:16 -0000	1.18
@@ -165,7 +165,6 @@
 struct FindObjectInRoom {
 	const CodeHeader *cdhd;
 	const byte *obcd;
-	const ImageHeader *imhd;
 	const byte *obim;
 	const byte *roomptr;
 };

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.582
retrieving revision 1.583
diff -u -d -r1.582 -r1.583
--- scumm.h	17 Apr 2005 22:59:43 -0000	1.582
+++ scumm.h	17 Apr 2005 23:19:16 -0000	1.583
@@ -744,7 +744,6 @@
 
 protected:
 	byte *_objectOwnerTable, *_objectRoomTable, *_objectStateTable;
-	ObjectIDMap _objectIDMap;
 	int _numObjectsInRoom;
 
 	virtual void setupRoomObject(ObjectData *od, const byte *room, const byte *searchptr = NULL);
@@ -794,6 +793,7 @@
 	byte *getOBCDFromObject(int obj);
 	const byte *getOBIMFromObject(const ObjectData &od);
 	const byte *getObjectImage(const byte *ptr, int state);
+	virtual int getObjectIdFromOBIM(const byte *obim);
 
 	int getDistanceBetween(bool is_obj_1, int b, int c, bool is_obj_2, int e, int f);
 





More information about the Scummvm-git-logs mailing list