protected void doCataclysm() {
        // kill all cells on one side
        int x, y;
        for (x = (on_right ? n_x / 2 : 0); x < (on_right ? n_x : n_x / 2); x++) {
            for (y = 0; y < n_y; y++) {
                if (!cell_grid[x][y].queryEmpty())
                    cell_grid[x][y].getOccupant().killSelf(cell_list, cell_grid);
            }
        }
        // replenish with new cells
        // initialize the world with some raw material (unconnected molecules)
        int px, py;
        for (int i = 0; i < N_CELLS / 2; i++) {
            // find an empty square
            px = (int) Math.floor(Math.random() * (float) n_x / 2) + (on_right ? n_x / 2 : 0);
            py = (int) Math.floor(Math.random() * (float) n_y);
            if (cell_grid[px][py].queryEmpty()) {
                new SquirmCell(px, py, SquirmCellProperties.getRandomType(), 0, cell_list, cell_grid);
            }
        }

        // do it to the other side next time...
        on_right = !on_right;
    }