diff options
author | Vincent Hamm | 2002-03-05 20:43:26 +0000 |
---|---|---|
committer | Vincent Hamm | 2002-03-05 20:43:26 +0000 |
commit | c0b0afa68a6f0643e1ee94f8d1c5ff98f557db25 (patch) | |
tree | de92b70f639494f60f621a5a4e1efd86c3a071b3 | |
parent | 6387020fd9a9c41654d37cb8feca464fd7d5fec1 (diff) | |
download | scummvm-rg350-c0b0afa68a6f0643e1ee94f8d1c5ff98f557db25.tar.gz scummvm-rg350-c0b0afa68a6f0643e1ee94f8d1c5ff98f557db25.tar.bz2 scummvm-rg350-c0b0afa68a6f0643e1ee94f8d1c5ff98f557db25.zip |
Fixed struct CodeHeader for v7 implementation
svn-id: r3651
-rw-r--r-- | object.cpp | 30 | ||||
-rw-r--r-- | scumm.h | 22 |
2 files changed, 36 insertions, 16 deletions
diff --git a/object.cpp b/object.cpp index efae0982f8..8205af8192 100644 --- a/object.cpp +++ b/object.cpp @@ -374,7 +374,14 @@ void Scumm::loadRoomObjects() { od->offs_obcd_to_room = ptr - room; cdhd = (CodeHeader*)findResourceData(MKID('CDHD'), ptr); - od->obj_nr = READ_LE_UINT16(&cdhd->obj_id); + + if(_features & GF_AFTER_V7) + od->obj_nr = READ_LE_UINT16(&(cdhd->v7.obj_id)); + else + if(_features & GF_AFTER_V6) + od->obj_nr = READ_LE_UINT16(&(cdhd->v6.obj_id)); + else + od->obj_nr = READ_LE_UINT16(&(cdhd->v5.obj_id)); #ifdef DUMP_SCRIPTS do { @@ -509,8 +516,14 @@ void Scumm::setupRoomObject(ObjectData *od, byte *room) { } cdhd = (CodeHeader*)findResourceData(MKID('CDHD'), room + od->offs_obcd_to_room); - od->obj_nr = READ_LE_UINT16(&cdhd->obj_id); - + if(_features & GF_AFTER_V7) + od->obj_nr = READ_LE_UINT16(&(cdhd->v7.obj_id)); + else + if(_features & GF_AFTER_V6) + od->obj_nr = READ_LE_UINT16(&(cdhd->v6.obj_id)); + else + od->obj_nr = READ_LE_UINT16(&(cdhd->v5.obj_id)); + #if !defined(FULL_THROTTLE) if (_features & GF_AFTER_V6) { od->width = READ_LE_UINT16(&cdhd->v6.w); @@ -738,6 +751,7 @@ void Scumm::findObjectInRoom(FindObjectInRoom *fo, byte findWhat, uint id, uint byte *roomptr,*obcdptr,*obimptr,*searchptr; RoomHeader *roomhdr; ImageHeader *imhd; + int id2; if (findWhat&foCheckAlreadyLoaded && getObjectIndex(id) != -1) { fo->obcd = obcdptr = getOBCDFromObject(id); @@ -778,7 +792,15 @@ void Scumm::findObjectInRoom(FindObjectInRoom *fo, byte findWhat, uint id, uint } } else { cdhd = (CodeHeader*)findResourceData(MKID('CDHD'), obcdptr); - if ( READ_LE_UINT16(&cdhd->obj_id) == (uint16)id) { + if ( _features & GF_AFTER_V7) + id2 = READ_LE_UINT16(&(cdhd->v7.obj_id)); + else + if( _features & GF_AFTER_V6) + id2 = READ_LE_UINT16(&(cdhd->v6.obj_id)); + else + id2 = READ_LE_UINT16(&(cdhd->v5.obj_id)); + + if ( id2 == (uint16)id) { fo->cdhd = cdhd; fo->obcd = obcdptr; break; @@ -113,20 +113,10 @@ struct AkosCI { int16 move_x, move_y; } GCC_PACK; -#if defined(FULL_THROTTLE) -struct CodeHeader { - uint32 version; - uint16 obj_id; - byte parent; - byte parentstate; -} GCC_PACK; - -#else struct CodeHeader { - uint16 obj_id; - union { struct { + uint16 obj_id; byte x,y,w,h; byte flags; byte parent; @@ -136,6 +126,7 @@ struct CodeHeader { } v5; struct { + uint16 obj_id; int16 x, y; uint16 w,h; byte flags, parent; @@ -143,9 +134,16 @@ struct CodeHeader { uint16 unk2; byte actordir; } v6; + + struct { + uint32 version; + uint16 obj_id; + byte parent; + byte parentstate; + } v7; + }; } GCC_PACK; -#endif #if defined(FULL_THROTTLE) struct ImageHeader { /* file format */ |