(object bigroom (room) "The Big Room"\r
(description "This is the Big Room. It's main purpose is\r
to host the devices that are used to test various\r
- features of LIFP."))\r
+ features of LIFP. The door to the north leads to closet.")\r
+ (n-to 'closetdoor))\r
\r
(object bigkey (item) "big key" bigroom\r
(description "This is a big key. It is probably used to\r
(with-keys bigkey)\r
(has :openable :closed :lockable :locked))\r
\r
+(object closetdoor (door) "door to closet" bigroom\r
+ (name "door")\r
+ (description "The door that leads to closet")\r
+ (destination 'closet))\r
+\r
+(object closet (room) "Small Closet"\r
+ (description "This closet is small and dimly lit.")\r
+ (s-to 'bigroom))\r
+\r
(supply init ()\r
(setf *location* bigroom)\r
"~%~%Somehow you ended up in some big room. But hey, what do\r
(look (look self)))\r
(has :~light))\r
\r
-(ifclass door (predoor scenery) (destination object) (has :door :closed))\r
+(ifclass door (predoor scenery) (destination object) \r
+ (has :door :closed :openable))\r
\r
\r
\r
\r
(defun transparent (obj)\r
"Whether the object is transparent"\r
- (or (has obj :container :open) \r
+ (or (and (has obj :container) (hasnt obj :closed)) \r
(has obj :supporter)\r
(has obj :transparent)\r
(eql obj *player*)))\r
(seep1 actor obj)))\r
\r
(defun passable (obj)\r
- (or (has obj :container :open)\r
+ (or (and (has obj :container) (hasnt obj :closed))\r
(has obj :supporter)\r
(eql obj *player*)))\r
\r
(defun print-inside (obj stream)\r
"Return the string containing the status of contents of the object"\r
(when (has obj :container)\r
- (if (or (has obj :open) (has obj :transparent))\r
+ (if (or (hasnt obj :closed) (has obj :transparent))\r
(if (children obj)\r
(progn (princ " (containing " stream) \r
(princ (list-contents obj) stream) \r
\r
(defmethod go-to-dispatch ((dest door))\r
(unless (has dest :door) (return-from go-to-dispatch (call-next-method)))\r
- (if (has dest :closed) (format nil "~a is closed." (the-name dest))\r
+ (if (has dest :closed) (format nil "~a is closed." (the-name dest :capital t))\r
(run-action 'pass *args*)))\r
\r
(defaction pass (obj)\r
(defaction enter (what)\r
"You can't enter that.")\r
\r
+(defmethod enter ((door door))\r
+ (go-to-dispatch door))\r
+\r
(defaction climb (what)\r
"You can't climb that.")\r
\r
(if (has obj :switchable)\r
(progn\r
(if (has obj :on)\r
- (format nil "~a is already on." (the-name obj))\r
+ (format nil "~a is already on." (the-name obj :capital t))\r
(progn (give obj :on)\r
(when (run-action-after obj) "Done."))))\r
(call-next-method)))\r
(if (has obj :switchable)\r
(progn\r
(if (hasnt obj :on)\r
- (format nil "~a is already off." (the-name obj))\r
+ (format nil "~a is already off." (the-name obj :capital t))\r
(progn (give obj :~on)\r
(when (run-action-after obj) "Done."))))\r
(call-next-method))) \r
(when (run-action-after obj)\r
(format nil "You open ~a." (the-name obj))))\r
"It's locked.")\r
- (format nil "~a is already open." (the-name obj))))\r
+ (format nil "~a is already open." (the-name obj :capital t))))\r
\r
(defaction close (obj)\r
"You cannot close this.")\r
(give obj :closed)\r
(when (run-action-after obj)\r
(format nil "You close ~a." (the-name obj))))\r
- (format nil "~a is already closed." (the-name obj))))\r
+ (format nil "~a is already closed." (the-name obj :capital t))))\r
\r
(defaction lock (obj key)\r
"Not lockable.")\r
(has obj :lockable))\r
(return-from lock (call-next-method)))\r
(if (has obj :locked) \r
- (format nil "~a is already locked." (the-name obj))\r
+ (format nil "~a is already locked." (the-name obj :capital t))\r
(if (hasnt obj :closed)\r
- (format nil "~a is not closed." (the-name obj))\r
+ (format nil "~a is not closed." (the-name obj :capital t))\r
(if (with-keys obj key)\r
(progn\r
(give obj :locked)\r
(has obj :lockable))\r
(return-from unlock (call-next-method)))\r
(if (hasnt obj :locked) \r
- (format nil "~a is already unlocked." (the-name obj))\r
+ (format nil "~a is already unlocked." (the-name obj :capital t))\r
(if (hasnt obj :closed)\r
- (format nil "~a is not closed." (the-name obj))\r
+ (format nil "~a is not closed." (the-name obj :capital t))\r
(if (with-keys obj key)\r
(progn\r
(give obj :~locked)\r