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