Ok, what happened. C2 uses a brute force collision check. The block falling check was doing 2500(50x50 blocks) collision checks per tick. And no block managed to reach anykind of rest state
oh, I got an idea. Give each block a Row/Col and a gotoX/Y variables. Upon deletion of block itterate each col(by for each ordered, block.col, descending) where blocks where destroyed. Assign the above blocks new Row and set a gotoY, and set falling = 1.
then block.falling = 1 and block.y < block.gotoY
-set position block.y = whatever
-if block.y > block.gotoy
-- block.y = block.gotoy,
-- block.falling = 0
I'm off too bed, but if I can help work on it tomorrow if you like :)