;;; Inside the hive
+(define-actor <meta-message> (<readable>)
+ ((cmd-read meta-message-read)))
+
+(define (meta-message-read gameobj message . _)
+ (define meta-message-text
+ (with-output-to-string
+ (lambda ()
+ (pprint-message message))))
+ (<- (message-from message) 'tell
+ #:text `((p (i "Through a bizarre error in spacetime, the message "
+ "prints itself out:"))
+ (p (pre ,meta-message-text)))))
+
+(define hive-inside
+ (lol
+ ('hive-inside
+ <room> #f
+ #:name "Inside the 8sync Hive"
+ #:desc
+ '((p "You're inside the 8sync Hive. Wow, from in here it's obvious just how "
+ (i "goopy") " everything is. Is that sanitary?")
+ (p "In the center of the room is a large, tentacled monster who is sorting,
+consuming, and routing messages. It is sitting in a wrap-around desk labeled
+\"Hive Actor: The Real Thing (TM)\".")
+ (p "There's a stray message floating just above the ground, stuck outside of
+time.")
+ (p "A door to the south exits from the Hive."))
+ #:exits
+ (list (make <exit>
+ #:name "south"
+ #:to 'hive-entrance)))
+ ;; hive actor
+ ;; TODO: Occasionally "fret" some noises, similar to the Clerk.
+ ('hive-inside:hive-actor
+ <chatty-npc> 'hive-inside
+ #:name "the Hive Actor"
+ #:desc
+ '((p "It's a giant tentacled monster, somehow integrated with the core of
+this building. A chute is dropping messages into a bin on its desk which the
+Hive Actor is checking the \"to\" line of, then ingesting. Whenever the Hive
+Actor injests a messsage a pulse of light flows along a tentacle which leaves
+the room... presumably connecting to one of those actors milling about.")
+ (p "Amusingly, the Hive has an \"umbellical cord\" type tentacle too, but
+it seems to simply attach to itself.")
+ (p "You get the sense that the Hive Actor, despite being at the
+center of everything, is kind of lonely and would love to chat if you
+could spare a moment."))
+ #:goes-by '("hive" "hive actor")
+ #:chat-format (lambda (npc catchphrase)
+ `("The tentacle monster bellows, \"" ,catchphrase "\""))
+ #:catchphrases
+ '("It's not MY fault everything's so GOOPY around here. Blame the
+PROPRIETOR."
+ "CAN'T you SEE that I'm BUSY??? SO MANY MESSAGES TO SHUFFLE.
+No wait... DON'T GO! I don't get many VISITORS."
+ "I hear the FIBERS system has a nice WORK STEALING system, but the
+PROPRIETOR is not convinced that our DESIGN won't CORRUPT ACTOR STATE.
+That and the ACTORS threatened to STRIKE when it CAME UP LAST."
+ "WHO WATCHES THE ACTORS? I watch them, and I empower them.
+BUT WHO WATCHES OR EMPOWERS ME??? Well, that'd be the scheduler."
+ "The scheduler is NO GOOD! The proprietory said he'd FIX IT,
+but the LAST TIME I ASKED how things were GOING, he said he DIDN'T HAVE
+TIME. If you DON'T HAVE TIME to fix the THING THAT POWERS THE TIME,
+something is TERRIBLY WRONG."
+ "There's ANOTHER HIVE somewhere out there. I HAVEN'T SEEN IT
+personally, because I CAN'T MOVE, but we have an AMBASSADOR which forwards
+MESSAGES to the OTHER HIVE."))
+ ;; chute
+ ('hive-inside:chute
+ <gameobj> 'hive-inside
+ #:name "a chute"
+ #:goes-by '("chute")
+ #:desc "Messages are being dropped onto the desk via this chute."
+ #:invisible? #t)
+ ;; meta-message
+ ('hive-inside:meta-message
+ <meta-message> 'hive-inside
+ #:name "a stray message"
+ #:goes-by '("meta message" "meta-message" "metamessage" "message" "stray message")
+ #:desc '((p "Something strange has happened to the fabric and space and time
+around this message. It is floating right above the floor. It's clearly
+rubbage that hadn't been delivered, but for whatever reason it was never
+garbage collected, perhaps because it's impossible to do.")
+ (p "You get the sense that if you tried to read the message
+that you would somehow read the message of the message that instructed to
+read the message itself, which would be both confusing and intriguing.")))
+ ;; desk
+ ('hive-inside:desk
+ <floor-panel> 'hive-inside
+ #:name "the Hive Actor's desk"
+ #:desc "The desk surrounds the Hive Actor on all sides, and honestly, it's a little
+bit hard to tell when the desk ends and the Hive Actor begins."
+ #:invisible? #t
+ #:goes-by '("Hive Actor's desk" "hive desk" "desk"))))
+
+
\f
;;; Game
;;; ----
(define (game-spec)
(append lobby grand-hallway smoking-parlor
playroom break-room computer-room underground-lab
- async-museum gift-shop hive-entrance))
+ async-museum gift-shop hive-entrance
+ hive-inside))
;; TODO: Provide command line args
(define (run-game . args)