Add some comments to summoning-bell-cmd-ring procedure
[mudsync.git] / worlds / bricabrac.scm
index 12217bfe1c42e8f88fa6a5df296a06303f559305..372515ede66d206292df8445bd660df71dd6c70d 100644 (file)
@@ -200,18 +200,34 @@ character.\n")))
    (simple-dispatcher summoning-bell-actions*)))
 
 (define-mhandler (summoning-bell-cmd-ring bell message)
+  ;; Call back to actor who invoked this message handler
+  ;; and find out their name.  We'll call *their* get-name message
+  ;; handler... meanwhile, this procedure suspends until we get
+  ;; their response.
   (define who-rang
     (message-ref
      (<-wait bell (message-from message) 'get-name)
      'val))
+  ;; Now we'll invoke the "tell" message handler on the player
+  ;; who rang us, displaying this text on their screen.
+  ;; This one just uses <- instead of <-wait, since we don't
+  ;; care when it's delivered; we're not following up on it.
   (<- bell (message-from message) 'tell
       #:text "*ring ring!*  You ring the bell!\n")
+  ;; We also want everyone else in the room to "hear" the bell,
+  ;; but they get a different message since they aren't the ones
+  ;; ringing it.  Notice here's where we make use of the invoker's
+  ;; name as extracted and assigned to the who-rang variable.
+  ;; Notice how we send this message to our "location", which
+  ;; forwards it to the rest of the occupants in the room.
   (<- bell (gameobj-loc bell) 'tell-room
       #:text
       (format #f "*ring ring!*  ~a rings the bell!\n"
               who-rang)
       #:exclude (message-from message))
-
+  ;; Now we perform the primary task of the bell, which is to summon
+  ;; the "clerk" character to the room.  (This is configurable,
+  ;; so we dynamically look up their address.)
   (<- bell (dyn-ref bell (slot-ref bell 'summons)) 'be-summoned
       #:who-summoned (message-from message)))
 
@@ -364,7 +380,7 @@ if this room is intended for children or child-like adults."
    ('thing:cuddles-plushie
     <thing> 'room:playroom
     #:name "a cuddles plushie"
-    #:goes-by '("plushie" "cuddles plushie")
+    #:goes-by '("plushie" "cuddles plushie" "cuddles")
     #:takeable #t
     #:desc "  A warm and fuzzy cuddles plushie!  It's a cuddlefish!")))
 
@@ -629,11 +645,13 @@ You can ask me about the following:
          #:text
          (format #f "\"Thanks ~a!\" says the clerk. \"I have somewhere I need to be.\"
 The clerk leaves the room in a hurry.\n"
-                 player-name))
+                 player-name)
+         #:exclude (actor-id clerk))
      (gameobj-set-loc! clerk (dyn-ref clerk 'room:break-room))
      (slot-set! clerk 'state 'slacking)
      (<- clerk (gameobj-loc clerk) 'tell-room
-         #:text clerk-return-to-slacking-text))
+         #:text clerk-return-to-slacking-text
+         #:exclude (actor-id clerk)))
     ('slacking
      (<- clerk (message-from message) 'tell
          #:text "The clerk sternly asks you to not be so dismissive.\n"))))
@@ -666,39 +684,36 @@ attend to.\n")
 (define-mhandler (clerk-act-update-loop clerk message)
   (define (tell-room text)
     (<- clerk (gameobj-loc clerk) 'tell-room
-        #:text text))
-  (define (loop return)
-    (define (stop-if-destructed)
-      (if (slot-ref clerk 'destructed)
-          (return #f)))
-    (match (slot-ref clerk 'state)
-      ('slacking
-       (tell-room (random-choice clerk-slacking-texts))
-       (8sleep (+ (random 10) 10))
-       (stop-if-destructed)
-       (loop return))
-      ('on-duty
-       (if (> (slot-ref clerk 'patience) 0)
-           ;; Keep working but lose patience gradually
-           (begin
-             (tell-room (random-choice clerk-working-impatience-texts))
-             (slot-set! clerk 'patience (- (slot-ref clerk 'patience)
-                                           (+ (random 2) 1)))
-             (8sleep (+ (random 25) 20))
-             (stop-if-destructed)
-             (loop return))
-           ;; Back to slacking
-           (begin
-             (tell-room clerk-slack-excuse-text)
-             ;; back bto the break room
-             (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'room:break-room)))
-             (tell-room clerk-return-to-slacking-text)
-             ;; annnnnd back to slacking
-             (slot-set! clerk 'state 'slacking)
-             (8sleep (+ (random 30) 15))
-             (stop-if-destructed)
-             (loop return))))))
-  (call/ec loop))
+        #:text text
+        #:exclude (actor-id clerk)))
+  (define (loop-if-not-destructed)
+    (if (not (slot-ref clerk 'destructed))
+        (<- clerk (actor-id clerk) 'update-loop)))
+  (match (slot-ref clerk 'state)
+    ('slacking
+     (tell-room (random-choice clerk-slacking-texts))
+     (8sleep (+ (random 10) 10))
+     (loop-if-not-destructed))
+    ('on-duty
+     (if (> (slot-ref clerk 'patience) 0)
+         ;; Keep working but lose patience gradually
+         (begin
+           (tell-room (random-choice clerk-working-impatience-texts))
+           (slot-set! clerk 'patience (- (slot-ref clerk 'patience)
+                                         (+ (random 2) 1)))
+           (8sleep (+ (random 25) 20))
+           (loop-if-not-destructed))
+         ;; Back to slacking
+         (begin
+           (tell-room clerk-slack-excuse-text)
+           ;; back bto the break room
+           (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'room:break-room)))
+           (tell-room clerk-return-to-slacking-text)
+           ;; annnnnd back to slacking
+           (slot-set! clerk 'state 'slacking)
+           (8sleep (+ (random 30) 15))
+           (loop-if-not-destructed))))))
+
 
 (define break-room
   (lol