Otherwise, the following thing goes wrong. You make a move which starts
a chain reaction; you undo it before the reaction has resolved and there
are still atoms from other players; and then you redo the move. At this
point, you have a static board and nobody can play, since both players
are :playing.
do (restore player snap-player))
(setf (game-player-index game) (slot-value snapshot 'player-index))
(game-cancel-timeout game)
- (changed game :refresh)))
+ (changed game :refresh)
+ (let ((critical-cells (loop for i below (array-total-size grid)
+ for cell = (row-major-aref grid i)
+ if (cell-critical-p cell)
+ collect cell)))
+ (when critical-cells (perform-explosions game critical-cells)))))
;;;--------------------------------------------------------------------------
;;; The interactive board.