TRECISION: Refresh the object sort table after a full screen video

Fixes graphics glitches after full motion videos. A regression from
a3d363fedc87216f2873fc88cbca3432c7bb6a49
This commit is contained in:
Filippos Karapetis 2021-05-20 21:11:28 +03:00 committed by SupSuper
parent c9244ac183
commit f2b4a07e5a
3 changed files with 10 additions and 7 deletions

View File

@ -216,12 +216,7 @@ void TrecisionEngine::readObject(Common::SeekableReadStream *stream, uint16 objI
_maskPointers[objIndex][i] = (uint8)stream->readByte();
}
if (obj->_mode & (OBJMODE_MASK | OBJMODE_FULL)) {
SSortTable entry;
entry._objectId = objectId;
entry._remove = !isObjectVisible(objectId);
_sortTable.push_back(entry);
}
refreshObject(objectId);
}
void TrecisionEngine::readObj(Common::SeekableReadStream *stream) {

View File

@ -361,11 +361,16 @@ void TrecisionEngine::setObjectVisible(uint16 objectId, bool visible) {
else
_obj[objectId]._mode &= ~OBJMODE_OBJSTATUS;
refreshObject(objectId);
}
void TrecisionEngine::refreshObject(uint16 objectId) {
if (_obj[objectId]._mode & (OBJMODE_MASK | OBJMODE_FULL)) {
SSortTable entry;
entry._objectId = objectId;
entry._remove = !isObjectVisible(objectId);
_sortTable.push_back(entry);
_sortTableReplay.push_back(entry);
}
}
@ -397,6 +402,7 @@ void TrecisionEngine::readLoc() {
_graphicsMgr->loadBackground(picFile, bgInfo._rect.width(), bgInfo._rect.height());
_sortTable.clear();
_sortTableReplay.clear();
readObj(picFile);
_soundMgr->stopAll();
@ -447,6 +453,7 @@ void TrecisionEngine::redrawRoom() {
_graphicsMgr->loadBackground(picFile, bgInfo._rect.width(), bgInfo._rect.height());
_sortTable.clear();
_sortTable = _sortTableReplay;
if (bgAnim)
_animMgr->startSmkAnim(bgAnim);

View File

@ -112,7 +112,6 @@ class TrecisionEngine : public Engine {
void doScreenUseWithScreen();
void doInvExamine();
void doInvOperate();
void doDoing();
void doScript();
void processCurrentMessage();
@ -202,6 +201,7 @@ public:
// Objects
void setObjectVisible(uint16 objectId, bool visible);
void refreshObject(uint16 objectId);
bool isObjectVisible(uint16 objectId) const;
void setObjectAnim(uint16 objectId, uint16 animId);
void redrawRoom();
@ -222,6 +222,7 @@ public:
SRoom _room[MAXROOMS];
Common::List<SSortTable> _sortTable;
Common::List<SSortTable> _sortTableReplay;
uint16 _curObj;
SObject _obj[MAXOBJ];