aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorMax Horn2005-06-23 14:10:52 +0000
committerMax Horn2005-06-23 14:10:52 +0000
commit3b6018452c30bb4a6908576ecc6751dff4a973a4 (patch)
tree094ceb69c8885fd8fb3c62051fb13df887a31d1d /scumm
parent1c361ee409a24618ecfb1c2c1bf12861ee7a41e3 (diff)
downloadscummvm-rg350-3b6018452c30bb4a6908576ecc6751dff4a973a4.tar.gz
scummvm-rg350-3b6018452c30bb4a6908576ecc6751dff4a973a4.tar.bz2
scummvm-rg350-3b6018452c30bb4a6908576ecc6751dff4a973a4.zip
Fix foCheckAlreadyLoaded case in findObjectInRoom; this is not used in any SCUMM game, just added this for completeness (see patch tracker item #1222246)
svn-id: r18440
Diffstat (limited to 'scumm')
-rw-r--r--scumm/object.cpp31
-rw-r--r--scumm/scumm.h2
2 files changed, 17 insertions, 16 deletions
diff --git a/scumm/object.cpp b/scumm/object.cpp
index 5d2b34e515..262a79a777 100644
--- a/scumm/object.cpp
+++ b/scumm/object.cpp
@@ -235,7 +235,7 @@ void ScummEngine::getObjectXYPos(int object, int &x, int &y, int &dir) {
if (state < 0)
state = 0;
- ptr = getOBIMFromObject(od);
+ ptr = getOBIMFromObjectData(od);
if (!ptr) {
// FIXME: We used to assert here, but it seems that in the nexus
// in The Dig, this can happen, at least with old savegames, and
@@ -455,7 +455,7 @@ void ScummEngine::drawObject(int obj, int arg) {
if (width == 0 || xpos > _screenEndStrip || xpos + width < _screenStartStrip)
return;
- ptr = getOBIMFromObject(od);
+ ptr = getOBIMFromObjectData(od);
if (_features & GF_OLD_BUNDLE)
ptr += 0;
@@ -1046,7 +1046,7 @@ byte *ScummEngine::getOBCDFromObject(int obj) {
return 0;
}
-const byte *ScummEngine::getOBIMFromObject(const ObjectData &od) {
+const byte *ScummEngine::getOBIMFromObjectData(const ObjectData &od) {
const byte *ptr;
if (od.fl_object_index) {
@@ -1100,7 +1100,7 @@ int ScummEngine::getObjectImageCount(int object) {
if (objnum == -1)
return 0;
- ptr = getOBIMFromObject(_objs[objnum]);
+ ptr = getOBIMFromObjectData(_objs[objnum]);
imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), ptr);
if (!imhd)
return 0;
@@ -1182,17 +1182,18 @@ void ScummEngine::findObjectInRoom(FindObjectInRoom *fo, byte findWhat, uint id,
int id2;
int obim_id;
- if (findWhat & foCheckAlreadyLoaded && getObjectIndex(id) != -1) {
- if (_features & GF_OLD_BUNDLE) {
- // I am not sure if this is even needed for old games...
- // but using READ_BE_UINT32 below to determine the resource size
- // definitely won't work with OLD_BUNDLE games
- error("findObjectInRoom foCheckAlreadyLoaded NYI for GF_OLD_BUNDLE (id = %d, room = %d)", id, room);
+ id2 = getObjectIndex(id);
+ if (findWhat & foCheckAlreadyLoaded && id2 != -1) {
+ assert(_version >= 6);
+ if (findWhat & foCodeHeader) {
+ fo->obcd = obcdptr = getOBCDFromObject(id);
+ assert(obcdptr);
+ fo->cdhd = (const CodeHeader *)findResourceData(MKID('CDHD'), obcdptr);
+ }
+ if (findWhat & foImageHeader) {
+ fo->obim = obimptr = getOBIMFromObjectData(_objs[id2]);
+ assert(obimptr);
}
- fo->obcd = obcdptr = getOBCDFromObject(id);
- assert(obcdptr);
- fo->obim = obimptr = obcdptr + READ_BE_UINT32(obcdptr + 4);
- fo->cdhd = (const CodeHeader *)findResourceData(MKID('CDHD'), obcdptr);
return;
}
@@ -1529,7 +1530,7 @@ void ScummEngine_v6::drawBlastObject(BlastObject *eo) {
if (objnum == -1)
error("drawBlastObject: getObjectIndex on BlastObject %d failed", eo->number);
- ptr = getOBIMFromObject(_objs[objnum]);
+ ptr = getOBIMFromObjectData(_objs[objnum]);
if (!ptr)
error("BlastObject object %d image not found", eo->number);
diff --git a/scumm/scumm.h b/scumm/scumm.h
index cad36260d8..7ebe07f297 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -811,7 +811,7 @@ protected:
uint32 getOBCDOffs(int object) const;
byte *getOBCDFromObject(int obj);
- const byte *getOBIMFromObject(const ObjectData &od);
+ const byte *getOBIMFromObjectData(const ObjectData &od);
const byte *getObjectImage(const byte *ptr, int state);
virtual int getObjectIdFromOBIM(const byte *obim);