diff options
-rw-r--r-- | scumm/sprite_he.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/scumm/sprite_he.cpp b/scumm/sprite_he.cpp index 9ddb31ea33..ae9eafeeb7 100644 --- a/scumm/sprite_he.cpp +++ b/scumm/sprite_he.cpp @@ -532,36 +532,39 @@ void ScummEngine_v90he::spriteInfoSet_rotAngle(int spriteId, int value) { void ScummEngine_v90he::spriteInfoSet_flag13(int spriteId, int value) { checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d"); + int oldFlags = _spriteTable[spriteId].flags; if (value) _spriteTable[spriteId].flags |= kSF13; else _spriteTable[spriteId].flags &= ~(kSF09 | kSF13); - if (_spriteTable[spriteId].res_id) + if (_spriteTable[spriteId].res_id && _spriteTable[spriteId].flags != oldFlags) _spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw; } void ScummEngine_v90he::spriteInfoSet_flag14(int spriteId, int value) { checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d"); + int oldFlags = _spriteTable[spriteId].flags; if (value) _spriteTable[spriteId].flags |= kSF14; else _spriteTable[spriteId].flags &= ~(kSF09 | kSF14); - if (_spriteTable[spriteId].res_id) + if (_spriteTable[spriteId].res_id && _spriteTable[spriteId].flags != oldFlags) _spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw; } void ScummEngine_v90he::spriteInfoSet_flag15(int spriteId, int value) { checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d"); + int oldFlags = _spriteTable[spriteId].flags; if (value) _spriteTable[spriteId].flags |= kSF15; else _spriteTable[spriteId].flags &= ~(kSF09 | kSF15); - if (_spriteTable[spriteId].res_id) + if (_spriteTable[spriteId].res_id && _spriteTable[spriteId].flags != oldFlags) _spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw; } @@ -577,12 +580,13 @@ void ScummEngine_v90he::spriteInfoSet_flagActive(int spriteId, int value) { void ScummEngine_v90he::spriteInfoSet_flag20(int spriteId, int value) { checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d"); + int oldFlags = _spriteTable[spriteId].flags; if (value) _spriteTable[spriteId].flags |= kSF20; else _spriteTable[spriteId].flags &= ~(kSFChanged | kSF20); - if (_spriteTable[spriteId].res_id) + if (_spriteTable[spriteId].res_id && _spriteTable[spriteId].flags != oldFlags) _spriteTable[spriteId].flags |= kSFChanged | kSFNeedRedraw; } |