Now we'll create a command to pickup objects in our world:
  (defun pickup-object (object)
    (cond ((is-at object location object-locations)
           (push (list object 'body) object-locations)
           `(you are now carrying the ,object))
	   (t '(you cannot get that.))))
This function checks to see if the object is indeed on the floor of the current location- If it is, it pushes the new location (the player's body) onto the list (pushing means to add a new item to the list, in a way that the assoc command sees and therefore hides the previous location) and returns a sentence letting us know whether it succeeded.
Now let's cast another SPEL to make the command easier to use:
  (defspel pickup (object)
    `(pickup-object ',object))
Now let's try our newest SPEL:
  (pickup whiskey-bottle)
  ==> (you are now carrying the whiskey-bottle)
Now let's add a couple more useful commands. First, a command that lets us see our current inventory of items we're carrying:
  (defun inventory ()
    (remove-if-not (lambda (x)
		     (is-at x 'body object-locations))
		   objects))
Now a function that tells us if we have a certain object with us:
  (defun have (object)
    (member object (inventory)))
<< begin < previous - next > end >>