(cmd-read readable-cmd-read))))
(define (readable-cmd-read actor message)
- (<- actor (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text (string-append (slot-ref actor 'read-text) "\n")))
(format #f "~a says: \"~a\"\n"
(slot-ref actor 'name)
(random-choice (slot-ref actor 'catchphrases))))
- (<- actor (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text text-to-send))
(define chat-commands
(define* (sign-cmd-sign-in actor message
#:key direct-obj indir-obj preposition)
(define old-name
- (msg-val (<-wait actor (message-from message) 'get-name)))
+ (mbody-val (<-wait (message-from message) 'get-name)))
(define name indir-obj)
(if (valid-name? indir-obj)
(begin
- (<-wait actor (message-from message) 'set-name! name)
- (<- actor (slot-ref actor 'loc) 'tell-room
+ (<-wait (message-from message) 'set-name! name)
+ (<- (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)))
- (<- actor (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text "Sorry, that's not a valid name.
Alphanumerics, _ and - only, 2-15 characters, starts with an alphabetic
character.\n")))
;; handler... meanwhile, this procedure suspends until we get
;; their response.
(define who-rang
- (msg-val (<-wait bell (message-from message) 'get-name)))
+ (mbody-val (<-wait (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
+ (<- (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
;; 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
+ (<- (gameobj-loc bell) 'tell-room
#:text
(format #f "*ring ring!* ~a rings the bell!\n"
who-rang)
;; 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
+ (<- (dyn-ref bell (slot-ref bell 'summons)) 'be-summoned
#:who-summoned (message-from message)))
(define* (furniture-cmd-sit actor message #:key direct-obj)
(define player-name
- (msg-val (<-wait actor (message-from message) 'get-name)))
- (<- actor (message-from message) 'tell
+ (mbody-val (<-wait (message-from message) 'get-name)))
+ (<- (message-from message) 'tell
#:text (format #f "You ~a ~a.\n"
(slot-ref actor 'sit-phrase)
(slot-ref actor 'sit-name)))
- (<- actor (slot-ref actor 'loc) 'tell-room
+ (<- (slot-ref actor 'loc) 'tell-room
#:text (format #f "~a ~a on ~a.\n"
player-name
(slot-ref actor 'sit-phrase-third-person)
;; call the gameobj main init method
(gameobj-act-init clerk message)
;; start our main loop
- (<- clerk (actor-id clerk) 'update-loop))
+ (<- (actor-id clerk) 'update-loop))
(define clerk-help-topics
'(("changing name" .
(define* (clerk-cmd-chat clerk message #:key direct-obj)
(match (slot-ref clerk 'state)
('on-duty
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text clerk-general-helpful-line))
('slacking
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text
(string-append
"The clerk says, \""
"\"\n")))))
(define (clerk-cmd-ask-incomplete clerk message)
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text "The clerk says, \"Ask about what?\"\n"))
(define clerk-doesnt-know-text
('on-duty
(match (assoc (pk 'indir indir-obj) clerk-help-topics)
((_ . info)
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text
(string-append "The clerk clears her throat and says:\n \""
info
"\"\n")))
(#f
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text clerk-doesnt-know-text))))
('slacking
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text "The clerk says, \"Sorry, I'm on my break.\"\n"))))
(define* (clerk-act-be-summoned clerk message #:key who-summoned)
(match (slot-ref clerk 'state)
('on-duty
- (<- clerk who-summoned 'tell
+ (<- who-summoned 'tell
#:text
"The clerk tells you as politely as she can that she's already here,
so there's no need to ring the bell.\n"))
('slacking
- (<- clerk (gameobj-loc clerk) 'tell-room
+ (<- (gameobj-loc clerk) 'tell-room
#:text
"The clerk's ears perk up, she stamps out a cigarette, and she
runs out of the room!\n")
(gameobj-set-loc! clerk (dyn-ref clerk 'room:lobby))
(slot-set! clerk 'patience 8)
(slot-set! clerk 'state 'on-duty)
- (<- clerk (gameobj-loc clerk) 'tell-room
+ (<- (gameobj-loc clerk) 'tell-room
#:text
(string-append
" Suddenly, a uniformed woman rushes into the room! She's wearing a
(define* (clerk-cmd-dismiss clerk message . _)
(define player-name
- (msg-val (<-wait clerk (message-from message) 'get-name)))
+ (mbody-val (<-wait (message-from message) 'get-name)))
(match (slot-ref clerk 'state)
('on-duty
- (<- clerk (gameobj-loc clerk) 'tell-room
+ (<- (gameobj-loc clerk) 'tell-room
#:text
(format #f "\"Thanks ~a!\" says the clerk. \"I have somewhere I need to be.\"
The clerk leaves the room in a hurry.\n"
#: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
+ (<- (gameobj-loc clerk) 'tell-room
#:text clerk-return-to-slacking-text
#:exclude (actor-id clerk)))
('slacking
- (<- clerk (message-from message) 'tell
+ (<- (message-from message) 'tell
#:text "The clerk sternly asks you to not be so dismissive.\n"))))
(define clerk-slacking-texts
(define (clerk-act-update-loop clerk message)
(define (tell-room text)
- (<- clerk (gameobj-loc clerk) 'tell-room
+ (<- (gameobj-loc clerk) 'tell-room
#:text text
#:exclude (actor-id clerk)))
(define (loop-if-not-destructed)
;; 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)))
+ (<- (actor-id clerk) 'update-loop)))
(match (slot-ref clerk 'state)
('slacking
(tell-room (random-choice clerk-slacking-texts))