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
            :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
            :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
 (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
           :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
   (: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