Document why the clerk-act-update-loop calls itself
[mudsync.git] / worlds / bricabrac.scm
index 16f91b8472e06f5ac66bf41d137e2b5d9a53c890..84836fa7690ab0c19d81eeca9105f70ed3b1716d 100644 (file)
@@ -160,14 +160,11 @@ or 'skribe'?  Now *that's* composition!"))
 (define* (sign-cmd-sign-in actor message
                            #:key direct-obj indir-obj preposition)
   (define old-name
-    (msg-receive (_ #:key val)
-        (<-wait actor (message-from message) 'get-name)
-      val))
+    (msg-val (<-wait actor (message-from message) 'get-name)))
   (define name indir-obj)
   (if (valid-name? indir-obj)
       (begin
-        (<-wait actor (message-from message) 'set-name!
-                #:val name)
+        (<-wait actor (message-from message) 'set-name! name)
         (<- actor (slot-ref actor 'loc) 'tell-room
             #:text (format #f "~a signs the form!\n~a is now known as ~a\n"
                            old-name old-name name)))
@@ -200,15 +197,14 @@ character.\n")))
    #:init-value
    (simple-dispatcher summoning-bell-actions*)))
 
-(define (summoning-bell-cmd-ring bell message)
+(define* (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
-    (msg-receive (_ #:key val)
-        (<-wait bell (message-from message) 'get-name)
-      val))
+    (msg-val (<-wait bell (message-from message) 'get-name)))
+
   ;; 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
@@ -419,9 +415,7 @@ if this room is intended for children or child-like adults."
 
 (define* (furniture-cmd-sit actor message #:key direct-obj)
   (define player-name
-    (msg-receive (_ #:key val)
-        (<-wait actor (message-from message) 'get-name)
-      val))
+    (msg-val (<-wait actor (message-from message) 'get-name)))
   (<- actor (message-from message) 'tell
       #:text (format #f "You ~a ~a.\n"
                      (slot-ref actor 'sit-phrase)
@@ -609,7 +603,7 @@ with tuition at where it is..."))
      (<- clerk (message-from message) 'tell
          #:text "The clerk says, \"Sorry, I'm on my break.\"\n"))))
 
-(define (clerk-act-be-summoned clerk message who-summoned)
+(define* (clerk-act-be-summoned clerk message #:key who-summoned)
   (match (slot-ref clerk 'state)
     ('on-duty
      (<- clerk who-summoned 'tell
@@ -635,11 +629,9 @@ feel free to ask me.  For example, 'ask clerk about changing name'.
 You can ask me about the following:
 " clerk-knows-about ".\"\n")))))
 
-(define (clerk-cmd-dismiss clerk message)
+(define* (clerk-cmd-dismiss clerk message . _)
   (define player-name
-    (msg-receive (_ #:key val)
-        (<-wait clerk (message-from message) 'get-name)
-      val))
+    (msg-val (<-wait clerk (message-from message) 'get-name)))
   (match (slot-ref clerk 'state)
     ('on-duty
      (<- clerk (gameobj-loc clerk) 'tell-room
@@ -682,6 +674,7 @@ attend to.\n")
 (define clerk-return-to-slacking-text
   "The desk clerk enters and slams the door behind her.\n")
 
+
 (define (clerk-act-update-loop clerk message)
   (define (tell-room text)
     (<- clerk (gameobj-loc clerk) 'tell-room
@@ -689,6 +682,14 @@ attend to.\n")
         #:exclude (actor-id clerk)))
   (define (loop-if-not-destructed)
     (if (not (slot-ref clerk 'destructed))
+        ;; This iterates by "recursing" on itself by calling itself
+        ;; (as the message handler) again.  It used to be that we had to do
+        ;; this, because there was a bug where a loop which yielded like this
+        ;; would keep growing the stack due to some parameter goofiness.
+        ;; That's no longer true, but there's an added advantage to this
+        ;; route: it's much more live hackable.  If we change the definition
+        ;; of this method, the character will act differently on the next
+        ;; "tick" of the loop.
         (<- clerk (actor-id clerk) 'update-loop)))
   (match (slot-ref clerk 'state)
     ('slacking