;;; Lobby
;;; -----
-(define-mhandler (npc-chat-randomly actor message)
+(define (npc-chat-randomly actor message . _)
(define text-to-send
(format #f "~a says: \"~a\"\n"
(slot-ref actor 'name)
(and (irregex-match name-sre name)
(not (member name forbidden-words))))
-(define-mhandler (sign-cmd-sign-in actor message direct-obj indir-obj)
+(define* (sign-cmd-sign-in actor message
+ #:key direct-obj indir-obj preposition)
(define old-name
- (message-ref
- (<-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-mhandler (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
- (message-ref
- (<-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
+ ;; 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)))
(cmd-sit-furniture (wrap-apply furniture-cmd-sit)))
gameobj-actions))))
-(define-mhandler (furniture-cmd-sit actor message direct-obj)
+(define* (furniture-cmd-sit actor message #:key direct-obj)
(define player-name
- (message-ref
- (<-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)
#:init-value
(simple-dispatcher clerk-actions*)))
-(define-mhandler (clerk-act-init clerk message)
+(define (clerk-act-init clerk message)
;; call the gameobj main init method
(gameobj-act-init clerk message)
;; start our main loop
energy particle physicist. But ya gotta pay the bills, especially
with tuition at where it is..."))
-(define-mhandler (clerk-cmd-chat clerk message)
+(define* (clerk-cmd-chat clerk message #:key direct-obj)
(match (slot-ref clerk 'state)
('on-duty
(<- clerk (message-from message) 'tell
(random-choice clerk-slacking-complaints)
"\"\n")))))
-(define-mhandler (clerk-cmd-ask-incomplete clerk message)
+(define (clerk-cmd-ask-incomplete clerk message)
(<- clerk (message-from message) 'tell
#:text "The clerk says, \"Ask about what?\"\n"))
(define clerk-doesnt-know-text
"The clerk apologizes and says she doesn't know about that topic.\n")
-(define-mhandler (clerk-cmd-ask clerk message indir-obj)
+(define (clerk-cmd-ask clerk message indir-obj)
(match (slot-ref clerk 'state)
('on-duty
(match (assoc (pk 'indir indir-obj) clerk-help-topics)
(<- clerk (message-from message) 'tell
#:text "The clerk says, \"Sorry, I'm on my break.\"\n"))))
-(define-mhandler (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-mhandler (clerk-cmd-dismiss clerk message)
+(define* (clerk-cmd-dismiss clerk message . _)
(define player-name
- (message-ref
- (<-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-mhandler (clerk-act-update-loop clerk message)
+(define (clerk-act-update-loop clerk message)
(define (tell-room text)
(<- clerk (gameobj-loc clerk) 'tell-room
#:text text