Skip to content
Permalink
Browse files
[HOTFIX] Fixed wrong quick-sort work
This error causes wrong blocks and BGO's order in a file that causes collisions misses in the SMBX Engine.
  • Loading branch information
Wohlstand committed Oct 28, 2015
1 parent e5a80a2 commit bb83d1212f8da25a7cd881f68ace238657401e30
Showing 1 changed file with 12 additions and 12 deletions.
@@ -93,16 +93,16 @@ void FileFormats::smbx64LevelSortBlocks(LevelData &lvl)
{
while ( (
(lvl.blocks[R].x > piv.x)||
( ((lvl.blocks[R].x == piv.x) && (lvl.blocks[R].y > piv.y))||
((lvl.blocks[R].y == piv.y) && (lvl.blocks[R].array_id >= piv.array_id)) )
((lvl.blocks[R].x == piv.x) && (lvl.blocks[R].y > piv.y))||
((lvl.blocks[R].x == piv.x) && (lvl.blocks[R].y == piv.y) && (lvl.blocks[R].array_id >= piv.array_id))
) && (L<R) ) R--;
if (L<R) lvl.blocks[L++]=lvl.blocks[R];

while (
(
(lvl.blocks[R].x < piv.x)||
( ((lvl.blocks[R].x == piv.x) && (lvl.blocks[R].y < piv.y))||
((lvl.blocks[R].y == piv.y) && (lvl.blocks[R].array_id <= piv.array_id)) )
(lvl.blocks[L].x < piv.x)||
((lvl.blocks[L].x == piv.x) && (lvl.blocks[L].y < piv.y))||
((lvl.blocks[L].x == piv.x) && (lvl.blocks[L].y == piv.y) && (lvl.blocks[L].array_id <= piv.array_id) )
) && (L<R)) L++;
if (L<R) lvl.blocks[R--]=lvl.blocks[L];
}
@@ -147,18 +147,18 @@ void FileFormats::smbx64LevelSortBGOs(LevelData &lvl)
{
while ( (
(lvl.bgo[R].smbx64_sp_apply > piv.smbx64_sp_apply)||
(((lvl.bgo[R].smbx64_sp_apply == piv.smbx64_sp_apply)&&(lvl.bgo[R].x > piv.x))||
( ((lvl.bgo[R].x == piv.x) && (lvl.bgo[R].y > piv.y))||
((lvl.bgo[R].y == piv.y) && (lvl.bgo[R].array_id >= piv.array_id)) ))
((lvl.bgo[R].smbx64_sp_apply == piv.smbx64_sp_apply) && (lvl.bgo[R].x > piv.x))||
((lvl.bgo[R].smbx64_sp_apply == piv.smbx64_sp_apply) &&(lvl.bgo[R].x == piv.x) && (lvl.bgo[R].y > piv.y))||
((lvl.bgo[R].smbx64_sp_apply == piv.smbx64_sp_apply) &&(lvl.bgo[R].x == piv.x) && (lvl.bgo[R].y == piv.y) && (lvl.bgo[R].array_id >= piv.array_id))
) && (L<R) ) R--;
if (L<R) lvl.bgo[L++]=lvl.bgo[R];

while (
(
(lvl.bgo[R].smbx64_sp_apply < piv.smbx64_sp_apply)||
(((lvl.bgo[R].smbx64_sp_apply == piv.smbx64_sp_apply)&&(lvl.bgo[R].x < piv.x))||
( ((lvl.bgo[R].x == piv.x) && (lvl.bgo[R].y < piv.y))||
((lvl.bgo[R].y == piv.y) && (lvl.bgo[R].array_id <= piv.array_id)) ))
(lvl.bgo[L].smbx64_sp_apply < piv.smbx64_sp_apply)||
((lvl.bgo[L].smbx64_sp_apply == piv.smbx64_sp_apply)&&(lvl.bgo[L].x < piv.x))||
((lvl.bgo[L].smbx64_sp_apply == piv.smbx64_sp_apply)&&(lvl.bgo[L].x == piv.x) && (lvl.bgo[L].y < piv.y))||
((lvl.bgo[L].smbx64_sp_apply == piv.smbx64_sp_apply)&&(lvl.bgo[L].x == piv.x) && (lvl.bgo[L].y == piv.y) && (lvl.bgo[L].array_id <= piv.array_id))
) && (L<R)) L++;
if (L<R) lvl.bgo[R--]=lvl.bgo[L];
}

0 comments on commit bb83d12

Please sign in to comment.