anchor.diff:    (draw-items :wall))
   
   (defun create-items ()
  -  (flet ((add (item type)
  -	   (push item (cdr (assoc type *items*)))
  -	   (qfun *scene* "addItem" item)))
  +  (labels ((add (type)
  +	     (let ((item (create-item type)))
  +	       (push item (cdr (assoc type *items*)))
  +	       (qfun *scene* "addItem" item)))
  +	   (add* (types)
  +	     (dolist (type types)
  +	       (add type))))
       (dolist (types *items*)
         (dolist (item (cdr types))
   	(qdel item)))
  -    (setf *items* (mapcar #'(lambda (x) (list (cdr x))) +item-types+))
  +    (setf *items* (mapcar #'(lambda (x) (list (cdr x))) +item-types+)) ; reset
       (dolist (row (maze-text *maze*))
         (do-string (char row)
   	(unless (char= #\Space char)
  -	  (let* ((type (char-type char))
  -		 (item (create-item type)))
  -	    (add item type)))))
  -    (add (create-item :player2) :player2)
  -    (dotimes (i (length (cdr (assoc :object *items*))))
  -      (add (create-item :object2) :object2))))
  +	  (let ((type (char-type char)))
  +	    (cond ((find type '(:player :player2))
  +		   (add* '(:player :player2)))
  +		  ((find type '(:object :object2))
  +		   (add* '(:object :object2 :goal)))
  +		  ((eql :wall type)
  +		   (add :wall)))))))))
   
   (defun create-item (type)
     (let* ((char (type-char type))
  -	 (file (format nil "pics/~(~a~).png" type))
  +	 (file (in-home (format nil "examples/sokoban/pics/~(~a~).png" type)))
   	 (item (if (probe-file file)
   		   (qnew "QGraphicsPixmapItem(QPixmap)" (qnew "QPixmap(QString)" file))
  -		   (let ((item (qnew "QGraphicsTextItem")))
  +		   (let ((item (qnew "QGraphicsTextItem"))) ; simple text item dummies (when pics are missing)
   		     (qfun item "setHtml"
   			   (format nil "<span style='font-family:monospace; font-size:12pt; font-weight:bold; color:~a;'>~c"
   				   (case type
  
positive.code: (defun draw-items (type)
    (let* ((char (type-char type))
  	 (size (maze-dimensions *maze*))
  	 (y 0)
  	 (curr (assoc* type *items*)))
      (flet ((hide ()
  	     (unless (eql :wall type)
  	       (dolist (item curr)
  		 (qfun* (first curr) "QGraphicsItem" "setVisible" nil)))))
        (hide)
        (dolist (row (maze-text *maze*))
  	(let ((x 0))
  	  (do-string (curr-char row)
  	    (when (char= char curr-char)
  	      (do- (qfun* (first curr) "QGraphicsItem")
  		("setPos" (list x y))
  		("setVisible" t))
  	      (setf curr (rest curr)))
  	    (incf x (first *item-size*))))
  	(incf y (second *item-size*)))
        (hide))))
  
negative.code: ;;;
  ;;; This is a simple GUI for CL-Sokoban, see http://www.cliki.net/CL-Sokoban 
  
  (load (eql:in-home "examples/sokoban/3rd-party/sokoban"))
  (load (eql:in-home "examples/sokoban/3rd-party/levels"))
  
  (defpackage :eql-sokoban
    (:use :common-lisp :util :eql :cl-sokoban)
  