Did some more work today on speeding up the simulation. Before, the cells that were calculated were all of them within the borders of the screen plus a small area outside of it. Current work is towards switching to a system where changed cells in a given frame mark cells adjacent to them for calculation in the next frame. The idea is that changes don't happen randomly; they're always spurred by other changes. So, there's no need to, say, check a boulder every frame to see if it should roll. If it's stable on a given frame, it won't be checked again unless the space around it is disturbed.
Since most of the game world is fairly static each frame, the result is potentially much more efficient world calculations, meaning being able to simulate more of it each frame. The biggest drawback is that gases are unsuitable for this system, since they'd be constantly spreading bit by bit regardless of whether the neighbors change. Even so, it's a promising direction for development.