[Scummvm-cvs-logs] SF.net SVN: scummvm: [29777] scummvm/trunk/engines/lure
chrilith at users.sourceforge.net
chrilith at users.sourceforge.net
Sun Dec 9 11:39:58 CET 2007
Revision: 29777
http://scummvm.svn.sourceforge.net/scummvm/?rev=29777&view=rev
Author: chrilith
Date: 2007-12-09 02:39:57 -0800 (Sun, 09 Dec 2007)
Log Message:
-----------
Hack to workaround struct padding added by some compilers (mainly on PalmOS)
Modified Paths:
--------------
scummvm/trunk/engines/lure/res.cpp
scummvm/trunk/engines/lure/res_struct.cpp
scummvm/trunk/engines/lure/res_struct.h
Modified: scummvm/trunk/engines/lure/res.cpp
===================================================================
--- scummvm/trunk/engines/lure/res.cpp 2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res.cpp 2007-12-09 10:39:57 UTC (rev 29777)
@@ -168,7 +168,8 @@
while (READ_LE_UINT16(&joinRec->hotspot1Id) != 0xffff) {
RoomExitJoinData *newEntry = new RoomExitJoinData(joinRec);
_exitJoins.push_back(newEntry);
- ++joinRec;
+
+ GET_NEXT(joinRec, RoomExitJoinResource);
}
delete mb;
@@ -178,7 +179,8 @@
while (READ_LE_UINT16(&hsRec->hotspotId) != 0xffff) {
HotspotData *newEntry = new HotspotData(hsRec);
_hotspotData.push_back(newEntry);
- ++hsRec;
+
+ GET_NEXT(hsRec, HotspotResource);
}
delete mb;
Modified: scummvm/trunk/engines/lure/res_struct.cpp
===================================================================
--- scummvm/trunk/engines/lure/res_struct.cpp 2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res_struct.cpp 2007-12-09 10:39:57 UTC (rev 29777)
@@ -77,8 +77,9 @@
RoomData::RoomData(RoomResource *rec, MemoryBlock *pathData) {
roomNumber = READ_LE_UINT16(&rec->roomNumber);
hdrFlags = rec->hdrFlags;
- actions = FROM_LE_32(rec->actions) & 0xfffffff;
- flags = (FROM_LE_32(rec->actions) >> 24) & 0xf0;
+
+ actions = READ_LE_UINT32(&rec->actions) & 0xfffffff;
+ flags = (READ_LE_UINT32(&rec->actions) >> 24) & 0xf0;
descId = READ_LE_UINT16(&rec->descId);
sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
numLayers = READ_LE_UINT16(&rec->numLayers);
@@ -90,7 +91,7 @@
clippingXStart = READ_LE_UINT16(&rec->clippingXStart);
clippingXEnd = READ_LE_UINT16(&rec->clippingXEnd);
- exitTime = FROM_LE_32(rec->exitTime);
+ exitTime = READ_LE_UINT32(&rec->exitTime);
areaFlag = rec->areaFlag;
walkBounds.left = READ_LE_UINT16(&rec->walkBounds.xs);
walkBounds.right = READ_LE_UINT16(&rec->walkBounds.xe);
@@ -361,7 +362,8 @@
HotspotActionData::HotspotActionData(HotspotActionResource *rec) {
action = (Action) rec->action;
- sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
+ // FIXME: some compilers may add padding to properly align the second member
+ sequenceOffset = READ_LE_UINT16(((byte *)rec) + 1);
}
uint16 HotspotActionList::getActionOffset(Action action) {
@@ -604,7 +606,9 @@
HotspotActionResource *actionRec = (HotspotActionResource *) data;
- for (int actionCtr = 0; actionCtr < numItems; ++actionCtr, ++actionRec) {
+ for (int actionCtr = 0; actionCtr < numItems; ++actionCtr,
+ GET_NEXT(actionRec, HotspotActionResource)) {
+
HotspotActionData *actionEntry = new HotspotActionData(actionRec);
push_back(actionEntry);
}
Modified: scummvm/trunk/engines/lure/res_struct.h
===================================================================
--- scummvm/trunk/engines/lure/res_struct.h 2007-12-09 10:39:50 UTC (rev 29776)
+++ scummvm/trunk/engines/lure/res_struct.h 2007-12-09 10:39:57 UTC (rev 29777)
@@ -39,6 +39,18 @@
/* */
/*-------------------------------------------------------------------------*/
+/* HACK/FIXME: three structs are misaligned (at least on 4-byte aligned system,
+ should have more troubles with coming 64bit systems), GET_NEXT let us read
+ properly sequence of struct in lure.dat hardcoding size of struct.
+*/
+
+#define GET_NEXT(v, sc) v = (sc *)(((byte *)v) + kSizeOf##sc)
+
+#define kSizeOfRoomExitJoinResource 13
+#define kSizeOfHotspotResource 62
+#define kSizeOfHotspotActionResource 3
+
+
#include "common/pack-start.h" // START STRUCT PACKING
struct VersionStructure {
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