mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-12 12:09:15 +00:00
SCI: Check for object visibility, if an object defines it
Fixes the inventory in GK1
This commit is contained in:
parent
4f6d42d77b
commit
398d0ffcef
@ -181,6 +181,7 @@ void Kernel::mapSelectors() {
|
||||
FIND_SELECTOR(skip);
|
||||
FIND_SELECTOR(fixPriority);
|
||||
FIND_SELECTOR(mirrored);
|
||||
FIND_SELECTOR(visible);
|
||||
FIND_SELECTOR(useInsetRect);
|
||||
FIND_SELECTOR(inTop);
|
||||
FIND_SELECTOR(inLeft);
|
||||
|
@ -149,6 +149,7 @@ struct SelectorCache {
|
||||
|
||||
Selector fixPriority;
|
||||
Selector mirrored;
|
||||
Selector visible;
|
||||
|
||||
Selector useInsetRect;
|
||||
Selector inTop, inLeft, inBottom, inRight;
|
||||
|
@ -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);
|
||||
|
@ -60,6 +60,7 @@ struct FrameoutEntry {
|
||||
GfxPicture *picture;
|
||||
int16 picStartX;
|
||||
int16 picStartY;
|
||||
bool visible;
|
||||
};
|
||||
|
||||
typedef Common::List<FrameoutEntry *> FrameoutList;
|
||||
|
Loading…
Reference in New Issue
Block a user