aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/plane32.cpp
diff options
context:
space:
mode:
authorColin Snover2017-07-13 17:03:34 -0500
committerColin Snover2017-07-13 21:31:07 -0500
commit7543bd444d46b2a8d4a2c79967c0a8d45a0874d1 (patch)
treebc8c7498e2e381484edbaaf25cdf671c62751fb6 /engines/sci/graphics/plane32.cpp
parent8047f3fa77c6fa2f6bb417366d4c9cbed29b82eb (diff)
downloadscummvm-rg350-7543bd444d46b2a8d4a2c79967c0a8d45a0874d1.tar.gz
scummvm-rg350-7543bd444d46b2a8d4a2c79967c0a8d45a0874d1.tar.bz2
scummvm-rg350-7543bd444d46b2a8d4a2c79967c0a8d45a0874d1.zip
SCI32: Move priority comparison of ScreenItems into its own function
Rendering bugs in ScummVM are often caused by buggy game scripts relying on the last ditch sort, which is not the same in ScummVM as in SSCI (since the SSCI last ditch sort relies on a different memory architecture and is super buggy). However, these bugs do not show up very frequently these days, so it is easy to forget all the places that need to be checked when debugging a rendering problem that appears to be caused by sorting failure. This commit breaks out the last ditch comparison formerly in Plane::calcLists to hopefully make it more visible to future programmers. Refs Trac#9957.
Diffstat (limited to 'engines/sci/graphics/plane32.cpp')
-rw-r--r--engines/sci/graphics/plane32.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/engines/sci/graphics/plane32.cpp b/engines/sci/graphics/plane32.cpp
index 47d41bc752..50a34656de 100644
--- a/engines/sci/graphics/plane32.cpp
+++ b/engines/sci/graphics/plane32.cpp
@@ -518,8 +518,7 @@ void Plane::calcLists(Plane &visiblePlane, const PlaneList &planeList, DrawList
) {
const ScreenItem *drawnItem = drawListEntry->screenItem;
- if (
- (newItem->_priority > drawnItem->_priority || (newItem->_priority == drawnItem->_priority && newItem->_creationId > drawnItem->_creationId)) &&
+ if (newItem->hasPriorityAbove(*drawnItem) &&
drawListEntry->rect.intersects(newItem->_screenRect)
) {
mergeToDrawList(j, drawListEntry->rect.findIntersectingRect(newItem->_screenRect), drawList);