(unless (cell-played cell player-index)
(return-from escape))
(setf (player-state player) :playing)
- (changed game :processing-move)
- (perform-explosions game (list cell)))))))
+ (changed game :processing-move))
+ (perform-explosions game (list cell))))))
(defmethod restart-game ((game atom-game) &key grid players)
(game-cancel-timeout game)
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.
(defmethod notify progn
((window atom-game-window) (game atom-game) aspect &key)
(case aspect
- ((:undo :redo :refresh :processing-move)
+ ((:undo :redo :refresh :start-turn)
(update-undo-redo-sensitivity window))))
(defun action-undo (window)