official update
[lifp.git] / verbs.lisp
index bf227ffd87a6ab52549b55b6d4bb295330f944da..406e6e622cd97a8f54944323745ea3541fa5ff42 100644 (file)
@@ -15,7 +15,8 @@
   (:export :attack :take :teleport :examine \r
           :go-to \r
           :take :put-in :put-on :drop :receive\r
   (:export :attack :take :teleport :examine \r
           :go-to \r
           :take :put-in :put-on :drop :receive\r
-          :wear :strip :enter :climb)\r
+          :wear :strip :enter :climb :drink :eat\r
+           :rub :turn :switch-on :switch-off)\r
   (:shadow :listen)\r
   (:shadowing-import-from :if-lib :room))\r
 \r
   (:shadow :listen)\r
   (:shadowing-import-from :if-lib :room))\r
 \r
       '(:noun -> listen)\r
       '("to" :noun -> listen))\r
 \r
       '(:noun -> listen)\r
       '("to" :noun -> listen))\r
 \r
+(verb "drink" "sip" "swallow" '(:noun -> drink))\r
+\r
+(verb "eat" "consume" '(:held -> eat))\r
+\r
+(verb "rub" "clean" "dust" "polish" "scrub" "shine"\r
+      "sweep" "wipe" '(:noun -> rub))\r
+\r
+(verb "switch"\r
+      '(:noun -> switch-on)\r
+      '(:noun "on" -> switch-on)\r
+      '(:noun "off" -> switch-off)\r
+      '("on" :noun -> switch-on)\r
+      '("off" :noun -> switch-off))\r
+\r
+(verb "turn"\r
+      '(:noun -> turn)\r
+      '(:noun "on" -> switch-on)\r
+      '(:noun "off" -> switch-off)\r
+      '("on" :noun -> switch-on)\r
+      '("off" :noun -> switch-off))\r
+\r
+\r
+\r
 (defaction attack (obj) "Violence is not the answer.")\r
 \r
 (defaction teleport (obj) \r
 (defaction attack (obj) "Violence is not the answer.")\r
 \r
 (defaction teleport (obj) \r
 (defaction take (obj)\r
   "You can't take that.")\r
 \r
 (defaction take (obj)\r
   "You can't take that.")\r
 \r
-(defmethod take((obj item))\r
+(defmethod take ((obj item))\r
   (if (has obj :item)\r
       (if (in obj *player*) \r
          (progn (sprint "You already have ~A" (the-name obj)) t) \r
   (if (has obj :item)\r
       (if (in obj *player*) \r
          (progn (sprint "You already have ~A" (the-name obj)) t) \r
   "You can't climb that.")\r
 \r
 (defaction listen (what)\r
   "You can't climb that.")\r
 \r
 (defaction listen (what)\r
-  "You hear nothing unexpected.")
\ No newline at end of file
+  "You hear nothing unexpected.")\r
+\r
+(defaction drink (what)\r
+  "You can't drink that.")\r
+\r
+(defaction eat (what)\r
+  "You can't eat that.")\r
+\r
+(defmethod eat ((obj food))\r
+  (if (has obj :edible)\r
+      (progn \r
+        (rmv obj)\r
+        (when (run-action-after obj)\r
+          (format nil "You eat ~a." (the-name obj))))\r
+      (call-next-method)))\r
+\r
+(defaction rub (what)\r
+  "This action achieves nothing.")\r
+\r
+(defaction turn (what)\r
+  "That's fixed in place")\r
+\r
+(defmethod turn ((item item))\r
+  (if (has item :item)\r
+      "This action achieves nothing."\r
+      (call-next-method)))\r
+\r
+(defaction switch-on (what)\r
+  "You can't switch this on")\r
+\r
+(defaction switch-off (what)\r
+  "You can't switch this off")\r
+\r
+(defmethod switch-on ((obj switchable))\r
+  (if (has obj :switchable)\r
+      (progn\r
+        (if (has obj :on)\r
+            (format nil "~a is already on." (the-name obj))\r
+            (progn (give obj :on)\r
+                   (when (run-action-after obj) "Done."))))\r
+      (call-next-method)))\r
+\r
+(defmethod switch-off ((obj switchable))\r
+  (if (has obj :switchable)\r
+      (progn\r
+        (if (hasnt obj :on)\r
+            (format nil "~a is already off." (the-name obj))\r
+            (progn (give obj :~on)\r
+                   (when (run-action-after obj) "Done."))))\r
+      (call-next-method)))        \r
+                     \r