aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/screen_item32.cpp
diff options
context:
space:
mode:
authorColin Snover2017-07-18 12:33:33 -0500
committerColin Snover2017-07-18 12:35:06 -0500
commit6ad230da7c4d1bfc6e46c5f12e845ae43fe9439b (patch)
treec7dd3db8b274ae170a904261f7a4886d3a9c4f6b /engines/sci/graphics/screen_item32.cpp
parent4fc6cef968fbf3dc12a6f60611689938dc76da8e (diff)
downloadscummvm-rg350-6ad230da7c4d1bfc6e46c5f12e845ae43fe9439b.tar.gz
scummvm-rg350-6ad230da7c4d1bfc6e46c5f12e845ae43fe9439b.tar.bz2
scummvm-rg350-6ad230da7c4d1bfc6e46c5f12e845ae43fe9439b.zip
SCI32: Fix kIsOnMe crashes in LSL7 About screen
Diffstat (limited to 'engines/sci/graphics/screen_item32.cpp')
-rw-r--r--engines/sci/graphics/screen_item32.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/engines/sci/graphics/screen_item32.cpp b/engines/sci/graphics/screen_item32.cpp
index 7b7553189a..cac643edf9 100644
--- a/engines/sci/graphics/screen_item32.cpp
+++ b/engines/sci/graphics/screen_item32.cpp
@@ -131,8 +131,11 @@ void ScreenItem::operator=(const ScreenItem &other) {
// to clear `_celObj` here; instead, it unconditionally set `_celInfo`,
// didn't clear `_celObj`, and did hacky stuff in `kIsOnMe` to avoid
// testing a mismatched `_celObj`. See `GfxFrameout::kernelIsOnMe` for
- // more detail.
- if (_celInfo != other._celInfo) {
+ // more detail. kCelTypeMem types are unconditionally invalidated because
+ // the properties of a CelObjMem can "change" when a game deletes a bitmap
+ // and then creates a new one that reuses the old bitmap's offset in
+ // BitmapTable (as happens in the LSL7 About screen when hovering names).
+ if (_celInfo.type == kCelTypeMem || _celInfo != other._celInfo) {
_celInfo = other._celInfo;
delete _celObj;
_celObj = nullptr;