diff --git a/LEGO1/mxregion.cpp b/LEGO1/mxregion.cpp index c9949091..d6693e0a 100644 --- a/LEGO1/mxregion.cpp +++ b/LEGO1/mxregion.cpp @@ -42,40 +42,41 @@ void MxRegion::vtable18(MxRect32 &p_rect) MxRegionListCursor cursor(m_list); if (rectCopy.m_left < rectCopy.m_right) { - MxRegionTopBottom *topBottom; - while (rectCopy.m_top < rectCopy.m_bottom && cursor.Next(topBottom)) { + while (rectCopy.m_top < rectCopy.m_bottom) { + MxRegionTopBottom *topBottom; + if (!cursor.Next(topBottom)) + break; + if (topBottom->m_top >= rectCopy.m_bottom) { MxRegionTopBottom *newTopBottom = new MxRegionTopBottom(rectCopy); cursor.Prepend(newTopBottom); rectCopy.m_top = rectCopy.m_bottom; } - else { - if (rectCopy.m_top < topBottom->m_bottom) { - if (rectCopy.m_top < topBottom->m_top) { - MxRect32 topBottomRect(rectCopy.m_left, rectCopy.m_top, rectCopy.m_right, topBottom->m_top); - MxRegionTopBottom *newTopBottom = new MxRegionTopBottom(topBottomRect); - cursor.Prepend(newTopBottom); - rectCopy.m_top = topBottom->m_top; - } - else if (topBottom->m_top < rectCopy.m_top) { - MxRegionTopBottom *newTopBottom = topBottom->Clone(); - newTopBottom->m_bottom = rectCopy.m_top; - topBottom->m_top = rectCopy.m_top; - cursor.Prepend(newTopBottom); - } + else if (rectCopy.m_top < topBottom->m_bottom) { + if (rectCopy.m_top < topBottom->m_top) { + MxRect32 topBottomRect(rectCopy.m_left, rectCopy.m_top, rectCopy.m_right, topBottom->m_top); + MxRegionTopBottom *newTopBottom = new MxRegionTopBottom(topBottomRect); + cursor.Prepend(newTopBottom); + rectCopy.m_top = topBottom->m_top; + } + else if (topBottom->m_top < rectCopy.m_top) { + MxRegionTopBottom *newTopBottom = topBottom->Clone(); + newTopBottom->m_bottom = rectCopy.m_top; + topBottom->m_top = rectCopy.m_top; + cursor.Prepend(newTopBottom); + } - if (rectCopy.m_bottom < topBottom->m_top) { - MxRegionTopBottom *newTopBottom = topBottom->Clone(); - newTopBottom->m_bottom = rectCopy.m_bottom; - topBottom->m_top = rectCopy.m_bottom; - newTopBottom->FUN_100c5280(rectCopy.m_left, rectCopy.m_right); - cursor.Prepend(newTopBottom); - rectCopy.m_top = rectCopy.m_bottom; - } - else { - topBottom->FUN_100c5280(rectCopy.m_left, rectCopy.m_right); - rectCopy.m_top = topBottom->m_top; - } + if (rectCopy.m_bottom < topBottom->m_top) { + MxRegionTopBottom *newTopBottom = topBottom->Clone(); + newTopBottom->m_bottom = rectCopy.m_bottom; + topBottom->m_top = rectCopy.m_bottom; + newTopBottom->FUN_100c5280(rectCopy.m_left, rectCopy.m_right); + cursor.Prepend(newTopBottom); + rectCopy.m_top = rectCopy.m_bottom; + } + else { + topBottom->FUN_100c5280(rectCopy.m_left, rectCopy.m_right); + rectCopy.m_top = topBottom->m_top; } }