The program endlessly calculates the generations. It determines the new values for all squares, and then "copies" these values into the visible world:
for y in 1..size_y-2 for x in 1..size_x-2 newCells[y][x] = newCellValue(cells, y, x) end end for y in 1..size_y-2 for x in 1..size_x-2 cells[y][x] = newCells[y][x] world.setLeaf(x, y, cells[y][x]) end end tools.checkState()