mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 02:10:28 +00:00
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:
parent
c9244ac183
commit
f2b4a07e5a
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
Loading…
x
Reference in New Issue
Block a user