diff options
author | Filippos Karapetis | 2012-05-14 02:30:15 +0300 |
---|---|---|
committer | Filippos Karapetis | 2012-05-14 02:30:15 +0300 |
commit | 398d0ffceffc2dc1241b3f667c180573c288ccbf (patch) | |
tree | c2d56422ea86a17ca4b29b2e1255b16a85782bba /engines/sci/graphics | |
parent | 4f6d42d77b5284552b12a7c0f427e060b27c3077 (diff) | |
download | scummvm-rg350-398d0ffceffc2dc1241b3f667c180573c288ccbf.tar.gz scummvm-rg350-398d0ffceffc2dc1241b3f667c180573c288ccbf.tar.bz2 scummvm-rg350-398d0ffceffc2dc1241b3f667c180573c288ccbf.zip |
SCI: Check for object visibility, if an object defines it
Fixes the inventory in GK1
Diffstat (limited to 'engines/sci/graphics')
-rw-r--r-- | engines/sci/graphics/frameout.cpp | 10 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index b12413ab69..42b51e409d 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -237,6 +237,7 @@ void GfxFrameout::kernelAddScreenItem(reg_t object) { memset(itemEntry, 0, sizeof(FrameoutEntry)); itemEntry->object = object; itemEntry->givenOrderNr = _screenItems.size(); + itemEntry->visible = true; _screenItems.push_back(itemEntry); kernelUpdateScreenItem(object); @@ -266,6 +267,11 @@ void GfxFrameout::kernelUpdateScreenItem(reg_t object) { itemEntry->signal = readSelectorValue(_segMan, object, SELECTOR(signal)); itemEntry->scaleX = readSelectorValue(_segMan, object, SELECTOR(scaleX)); itemEntry->scaleY = readSelectorValue(_segMan, object, SELECTOR(scaleY)); + itemEntry->visible = true; + + // Check if the entry can be hidden + if (lookupSelector(_segMan, object, SELECTOR(visible), NULL, NULL) != kSelectorNone) + itemEntry->visible = readSelectorValue(_segMan, object, SELECTOR(visible)); } void GfxFrameout::kernelDeleteScreenItem(reg_t object) { @@ -433,6 +439,7 @@ void GfxFrameout::createPlaneItemList(reg_t planeObject, FrameoutList &itemList) picEntry->x = planePicture->getSci32celX(pictureCelNr); picEntry->picStartX = pictureIt->startX; picEntry->picStartY = pictureIt->startY; + picEntry->visible = true; picEntry->priority = planePicture->getSci32celPriority(pictureCelNr); @@ -541,6 +548,9 @@ void GfxFrameout::kernelFrameout() { for (FrameoutList::iterator listIterator = itemList.begin(); listIterator != itemList.end(); listIterator++) { FrameoutEntry *itemEntry = *listIterator; + if (!itemEntry->visible) + continue; + if (itemEntry->object.isNull()) { // Picture cel data itemEntry->x = upscaleHorizontalCoordinate(itemEntry->x); diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h index 8c3cc261d5..a3d686c592 100644 --- a/engines/sci/graphics/frameout.h +++ b/engines/sci/graphics/frameout.h @@ -60,6 +60,7 @@ struct FrameoutEntry { GfxPicture *picture; int16 picStartX; int16 picStartY; + bool visible; }; typedef Common::List<FrameoutEntry *> FrameoutList; |