[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
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.442,2.443 resource.cpp,1.315,1.316 scumm.cpp,1.437,1.438 scumm.h,1.581,1.582
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm object.cpp,1.225,1.226
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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);
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.442,2.443 resource.cpp,1.315,1.316 scumm.cpp,1.437,1.438 scumm.h,1.581,1.582
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm object.cpp,1.225,1.226
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list