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