official update
authorgrue <grue@mail.ru>
Thu, 9 Feb 2006 10:34:53 +0000 (10:34 +0000)
committergrue <grue@mail.ru>
Thu, 9 Feb 2006 10:34:53 +0000 (10:34 +0000)
darcs-hash:0ca1bf8978c98047303c9c9c7ee16e72eb8e4930

if.lisp
iflib.lisp
verbs.lisp

diff --git a/if.lisp b/if.lisp
index dd8d31ae82e56a99d3aba7d3394afba901632796..08d5038aa070f1f779b87225b04cc1a2c0fdcf2a 100644 (file)
--- a/if.lisp
+++ b/if.lisp
@@ -47,7 +47,7 @@
            :verb :extend-verb :extend-verb-first\r
            :extend-verb-only :extend-verb-only-first\r
            :deftoken :string== :matchp :!last!\r
-           :in :objectloop :provides\r
+           :in :notin :objectloop :provides\r
            :wordlist :tokenlist\r
            :nosuchword :nosuchword-word\r
            :parse-command :unknown-verb :run-action :run-action-after\r
index 0098e5c2472bdbd5ea2cb261368d954fa5307073..8ed948098176870efde758fdbc3d4333005477c7 100644 (file)
@@ -22,6 +22,7 @@
 (defpackage :if-lib\r
   (:use :common-lisp :if-basic-lib :if-console)\r
   (:export :container :room :item :clothing :capacity\r
+           :food :switchable\r
           :n-to :ne-to :e-to :se-to :s-to :sw-to :w-to :nw-to :in-to :out-to\r
           :u-to :d-to :cant-go\r
           :*intscope*  :*outscope* :*location* :*trace-light* :*vowels*\r
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
-          :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
       '(: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 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
   "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