[Scummvm-cvs-logs] SF.net SVN: scummvm: [31638] scummvm/trunk/engines/made/database.cpp
john_doe at users.sourceforge.net
john_doe at users.sourceforge.net
Mon Apr 21 09:28:13 CEST 2008
Revision: 31638
http://scummvm.svn.sourceforge.net/scummvm/?rev=31638&view=rev
Author: john_doe
Date: 2008-04-21 00:28:13 -0700 (Mon, 21 Apr 2008)
Log Message:
-----------
Fixed endian issues in get/setObjectProperty.
Modified Paths:
--------------
scummvm/trunk/engines/made/database.cpp
Modified: scummvm/trunk/engines/made/database.cpp
===================================================================
--- scummvm/trunk/engines/made/database.cpp 2008-04-21 04:17:14 UTC (rev 31637)
+++ scummvm/trunk/engines/made/database.cpp 2008-04-21 07:28:13 UTC (rev 31638)
@@ -52,16 +52,6 @@
source.readUint16LE(); // skip flags
uint16 type = source.readUint16LE();
- /*
- if (type < 0x7FFE) {
- byte count1 = source.readByte();
- byte count2 = source.readByte();
- _objSize = (count1 + count2) * 2;
- } else {
- _objSize = source.readUint16LE();
- }
- */
-
if (type == 0x7FFF) {
_objSize = source.readUint16LE();
} else if (type == 0x7FFE) {
@@ -79,10 +69,6 @@
_objData = new byte[_objSize];
source.read(_objData, _objSize);
- /*
- debug(2, "Object::load(con): flags = %04X; type = %04X; _objSize = %04X\n", getFlags(), getClass(), _objSize);
- fflush(stdout);
- */
}
void Object::load(byte *source) {
@@ -98,11 +84,6 @@
_objSize += 6;
- /*
- debug(2, "Object::load(var): flags = %04X; type = %04X; _objSize = %04X\n", getFlags(), getClass(), _objSize);
- fflush(stdout);
- */
-
}
uint16 Object::getFlags() const {
@@ -160,10 +141,10 @@
return vector[index];
} else if (getClass() == 0x7FFE) {
int16 *vector = (int16*)getData();
- return vector[index];
+ return READ_LE_UINT16(&vector[index]);
} else if (getClass() < 0x7FFE) {
int16 *vector = (int16*)getData();
- return vector[index];
+ return READ_LE_UINT16(&vector[index]);
} else {
return 0; // FIXME
}
@@ -175,7 +156,7 @@
vector[index] = value;
} else if (getClass() <= 0x7FFE) {
int16 *vector = (int16*)getData();
- vector[index] = value;
+ WRITE_LE_UINT16(&vector[index], value);
}
}
@@ -224,7 +205,10 @@
for (uint32 i = 0; i < objectCount; i++) {
Object *obj = new Object();
- // The LSB indicates if it's a constant or variable object
+
+ // The LSB indicates if it's a constant or variable object.
+ // Constant objects are loaded from disk, while variable objects exist
+ // in the _gameState buffer.
debug(2, "obj(%04X) ofs = %08X\n", i, objectOffsets[i]);
@@ -252,8 +236,6 @@
int16 *GameDatabase::getObjectPropertyPtr(int16 objectIndex, int16 propertyId, int16 &propertyFlag) {
Object *obj = getObject(objectIndex);
- //dumpObject(objectIndex);
-
int16 *prop = (int16*)obj->getData();
byte count1 = obj->getCount1();
byte count2 = obj->getCount2();
@@ -265,11 +247,11 @@
// First see if the property exists in the given object
while (count2-- > 0) {
- if ((*prop & 0x3FFF) == propertyId) {
- if (*prop & 0x4000) {
+ if ((READ_LE_UINT16(prop) & 0x3FFF) == propertyId) {
+ if (READ_LE_UINT16(prop) & 0x4000) {
debug(2, "! L1.1\n");
propertyFlag = 1;
- return (int16*)_gameState + *propPtr1;
+ return (int16*)_gameState + READ_LE_UINT16(propPtr1);
} else {
debug(2, "! L1.2\n");
propertyFlag = obj->getFlags() & 1;
@@ -291,8 +273,6 @@
debug(2, "parentObjectIndex = %04X\n", parentObjectIndex);
- //dumpObject(parentObjectIndex);
-
obj = getObject(parentObjectIndex);
prop = (int16*)obj->getData();
@@ -303,12 +283,12 @@
int16 *propertyPtr = prop + count1;
while (count2-- > 0) {
- if (!(*prop & 0x8000)) {
- if ((*prop & 0x3FFF) == propertyId) {
+ if (!(READ_LE_UINT16(prop) & 0x8000)) {
+ if ((READ_LE_UINT16(prop) & 0x3FFF) == propertyId) {
if (*prop & 0x4000) {
debug(2, "! L2.1\n");
propertyFlag = 1;
- return (int16*)_gameState + *propPtr1;
+ return (int16*)_gameState + READ_LE_UINT16(propPtr1);
} else {
debug(2, "! L2.2\n");
propertyFlag = obj->getFlags() & 1;
@@ -318,11 +298,11 @@
propPtr1++;
}
} else {
- if ((*prop & 0x3FFF) == propertyId) {
+ if ((READ_LE_UINT16(prop) & 0x3FFF) == propertyId) {
if (*prop & 0x4000) {
debug(2, "! L3.1\n");
propertyFlag = 1;
- return (int16*)_gameState + *propertyPtr;
+ return (int16*)_gameState + READ_LE_UINT16(propertyPtr);
} else {
debug(2, "! L3.2\n");
propertyFlag = obj->getFlags() & 1;
@@ -341,8 +321,6 @@
debug(2, "! NULL(nf)\n");
return NULL;
- fflush(stdout);
-
}
int16 GameDatabase::getObjectProperty(int16 objectIndex, int16 propertyId) {
@@ -354,7 +332,7 @@
int16 *property = getObjectPropertyPtr(objectIndex, propertyId, propertyFlag);
if (property) {
- return *property;
+ return (int16)READ_LE_UINT16(property);
} else {
return 0;
}
@@ -371,7 +349,7 @@
if (property) {
if (propertyFlag == 1) {
- *property = value;
+ WRITE_LE_UINT16(property, value);
} else {
debug(2, "GameDatabase::setObjectProperty(%04X, %04X, %04X) Trying to set constant property\n",
objectIndex, propertyId, value);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list